19 views
B!0X

ZStreamとFs2Streamを相互変換する

ziostreamとfs2streamを相互変換する

ZIOを使ってサーバーを立てるときたまにwebsocketを使用したい時がある。
内部的にはZStreamを使用しているので、後はそれをhttp serverにつなぎこむだけなのだが、今の所ZIO×http serverのstableなライブラリはない。
そんなときによくhpp4sでサーバーを立て、ZStreamをfs2Streamに変換してwebsocketを実装している。
そのやり方。

zio.stream.interop.fs2zを使う

変換と言ってもすでにライブラリ側で実装されてるのでそれを使うだけ。

まずはinteropを依存に含める。

libraryDependencies += "dev.zio" %% "zio-interop-cats" % <Version>

その後importして使うだけ。

import zio.stream.interop.fs2z.\_
import zio.stream.\_

object A {
  val zs: ZStream\[Any, Throwable, String\] = ???
  val fss: fs2.Stream\[ZIO\[Any, Throwable, \*\], String\] = zs.toFs2Stream
  val zs2: ZStream\[Any, Throwable, String\] = fss.toZStream
}

zioは書くライブラリとのinteropが多数用意されていて非常に運用が楽。