either sealed trait with specs and more tests for option