zio/zio2
-
Ref vs Ref.Synchronizedzio/zio2 2022. 12. 9. 19:30
Ref 와 Ref.Synchronized 의 차이는 무엇일까? Ref update function may be run more than once import zio._ object RefApp extends zio.ZIOAppDefault { def demo: UIO[Unit] = { def task(id: Int, ref: Ref[Int]): UIO[Unit] = ref.modify(prev => (println(s"Task $id updating ref at $prev"), id)) for { ref Task5 --> Task3 --> Task2 --> Task4 순으로 ref state 를 업데이트 했다. Task 1 updating ref at 0 Task 3 updating ref at 0 Ta..
-
Error Modelszio/zio2 2022. 11. 20. 23:12
Errors = failures present in the ZIO type signature ("checked" errors) Defects = failures that are unrecoverable, unforeseen, NOT present in the ZIO type signature ZIO[R,E,A] can finish with Exit[E,A] - Success[A] containing a value - Cause[E] - Fail[E] containing the error - Die(t: Throwable) which was unforeseen val failedInt: ZIO[Any, String, Int] = ZIO.fail("I failed!") val failureCauseExpos..
-
Option 처리하기zio/zio2 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)..
-
ZLayer 를 이용한 dependency injectionzio/zio2 2022. 7. 27. 20:05
문제 zio1 에서의 zlayer example 을 zio2 의 zlayer 를 이용해 구현해 보자 코드 아래처럼는 공식 가이드를 이용해 작성한 코드이지만.. 개인적으로 생각하는 코드는 바로 아래에 추가했다. import zio._ import java.util.concurrent.TimeUnit object ZLayerTest extends zio.ZIOAppDefault { trait Logging { def log(line: String): UIO[Unit] } object Logging { def log(line: String): URIO[Logging, Unit] = ZIO.serviceWithZIO[Logging](_.log(line)) } case class LoggingLive(ref: R..
-
java callback 을 ZIO 로 바꾸기zio/zio2 2022. 7. 17. 17:04
문제 https://wefree.tistory.com/199 에서는 java callback 를 scala Future 로 바꾸었다. 이번에는 ZIO.asyncZIO() 를 이용해 ZIO 로 변경해 보자. https://wefree.tistory.com/199 와 동일하게 java Async Http Client 의 callback 을 살펴보자. val asyncHttpClient = org.asynchttpclient.Dsl.asyncHttpClient() val listenableFuture = asyncHttpClient.prepareGet("https://api.agify.io/?name=meelad").execute() val listener = new Runnable { override def..