zio/zio2
Option 처리하기
wefree
2022. 11. 20. 16:15
some, asSomeError, unsome 등의 사용법을 보자. (+ asSome)
각기 다른 Error type 을 Option[Throwable] 로 만들어 composing 했다.
ZIO#flattenErrorOption 도 참고하자.
val maybeId: ZIO[Any, Option[Nothing], String] = ZIO.fromOption(Some("abc123"))
def getUser(userId: String): ZIO[Any, Throwable, Option[User]] = ???
def getTeam(teamId: String): ZIO[Any, Throwable, Team] = ???
val result: ZIO[Any, Throwable, Option[(User, Team)]] = (for {
id <- maybeId
user <- getUser(id).some
team <- getTeam(user.teamId).asSomeError
} yield (user, team)).unsome