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