ZStreamと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が多数用意されていて非常に運用が楽。

Scalaでcsvをexcelで開くときにUTF-8で解釈させ文字化けを防ぐ方法 型レベル多項式の微分 Scala summoner pattern
View Comments
There are currently no comments.