github zio/zio-http v1.0.0.0-RC22

latest releases: v3.0.1, v3.0.0, v3.0.0-RC10...
2 years ago

Highlights

💥 Breaking Changes

  • Follow ZIO 2.0 naming conventions Example: CollectM => CollectZIO
private val app = Http.collectZIO[Request] {
  case Method.GET -> !! / "random" => random.nextString(10).map(Response.text(_))
  case Method.GET -> !! / "utc"    => clock.currentDateTime.map(s => Response.text(s.toString))
}
  • Removed Type Params from Response
  • Removed Type Params from SocketApp
  • Removed Type Params from HttpData
  • Renamed socket to fromSocket in Response
  • Removed @@ composition from cookie
    private val app = Http.collect[Request] {
        case Method.GET -> !! / "cookie" =>
          Response.ok.addCookie(cookie.withPath(!! / "cookie").withHttpOnly)
    }
  • Builder pattern for SocketApp
    private val fooBar = Socket.collect[WebSocketFrame] {
        case WebSocketFrame.Text("FOO") => ZStream.succeed(WebSocketFrame.text("BAR"))
      }
    
    private val socketApp = {
        SocketApp(fooBar) // Called after each message being received on the channel
          // Called after the request is successfully upgraded to websocket
          .onOpen(open)
          // Called after the connection is closed
          .onClose(_ => console.putStrLn("Closed!").ignore)
      }

✨ New APIs

  • Added wrapZIO operator on Response
    private val app =
        Http.collectZIO[Request] {
          case Method.GET -> !! / "greet" / name  => Response.text(s"Greetings ${name}!").wrapZIO
        }
  • Added toSocketApp and toResponse on Socket
      private val app =
        Http.collectZIO[Request] {
          case Method.GET -> !! / "subscriptions" => socketApp.toResponse
        }
      
  • Added collectHttp on Http
    val app = Http.collectHttp[Request] {
    // Read the file as ZStream
    // Uses the blocking version of ZStream.fromFile
    case Method.GET -> !! / "blocking" => Http.fromStream(ZStream.fromFile(Paths.get("README.md")))
    }
  • Added provide on SocketApp
    private val echo = Socket.collect[WebSocketFrame] { case WebSocketFrame.Text(text) =>
    ZStream.repeat(WebSocketFrame.text(s"Received: $text")).schedule(Schedule.spaced(1 second)).take(3)
    }
    val env = Has.apply(Clock.Service.live)
    private val socketApp: SocketApp[Any] = SocketApp(echo).provide(env)

Changes

🚀 Features

Improvements

🐛 Bug Fixes

🧰 Maintenance

Don't miss a new zio-http release

NewReleases is sending notifications on new releases.