zio-json

zio-json

  • Overview
  • Interop modules
  • API
  • About

›Interop

Interop

  • Interop modules
  • Akka Http Interop
  • HTTP4s Interop
  • Refined Interop
  • Scalaz 7.x Interop

Akka Http Interop

An interop module is provided for Akka Http 10.2.4

Installation

libraryDependencies ++= Seq(
  "de.heikoseeberger" %% "akka-http-zio-json" % "1.36.0",
)

Usage

import akka.actor.ActorSystem
import akka.http.scaladsl.marshalling.Marshal
import akka.http.scaladsl.model.HttpEntity
import akka.http.scaladsl.unmarshalling.Unmarshal
import de.heikoseeberger.akkahttpziojson.ZioJsonSupport
import zio.{ Task, ZIO }
import zio.json._

final case class Greeting(greeting: String)

object Greeting {
  import ZioJsonSupport._

  implicit val decoder: JsonDecoder[Greeting] =
    DeriveJsonDecoder.gen[Greeting]

  implicit val encoder: JsonEncoder[Greeting] =
    DeriveJsonEncoder.gen[Greeting]

  //    automatically derived from the zio-json codecs

  //    implicit val akkaMarshaller: ToEntityMarshaller[Greeting] =
  //      implicitly[ToEntityMarshaller[Greeting]]
  //
  //    implicit val akkaUnmarshaller: FromEntityUnmarshaller[Greeting] =
  //      implicitly[FromEntityUnmarshaller[Greeting]]

  implicit val system = ActorSystem()

  // under the hood, Akka Http uses marshallers and unmarshallers for Json http entities

  def marshallGreeting(greeting: Greeting): Task[HttpEntity] =
    ZIO.fromFuture(implicit ec => Marshal(greeting).to[HttpEntity])

  def unmarshallGreeting(entity: HttpEntity): Task[Greeting] =
    ZIO.fromFuture(implicit ec => Unmarshal(entity).to[Greeting])
}

Example project

A fully working example can be found here.

← Interop modulesHTTP4s Interop →
  • Installation
  • Usage
  • Example project
zio-json
GitHub
Star
Chat with us on Discord
discord
Additional resources
Scaladoc of zio-json
Copyright © 2022 ZIO Maintainers