Я хочу полностью избавиться от исключений в моем коде Scala, вместо этого возвращать явные / типизированные результаты (ADT) из методов, подобных этому:
class SomeService {
def method1: Method1Result = ...
}
object SomeService {
trait Method1Result
object Method1Result {
case class Success(id: String) extends Method1Result
case object AlreadyExists extends Method1Result
case object Error extends Method1Result
}
}
Но, как вы видите, это слишком шаблонно ....
В идеале я хотел бы иметь что-то вроде этого:
class SomeService {
def method1: Success(id: String) | AlreadyExists | Error
}
Итак, как вы видите, ADT определен в типе возврата method1
* 1011.* Может быть, есть некоторые плагины компилятора или библиотеки обработки аннотаций, которые позволяют писать такой код и генерировать ADT под капотом?
Или как лучше всего использовать Scala, если я хочу вернуть типизированные результаты из метода?