A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://github.com/TinkoffCreditSystems/phobos below:

Tinkoff/phobos: Efficient and expressive XML data-binding library for Scala

Phobos is an XML data-binding library based on stream parsing. It depends only on aalto-xml for parsing.

Scala 2.12, 2.13 and 3 are supported. See Supported Scala versions for more details.

Add phobos-core to your dependencies:

libraryDependencies += "ru.tinkoff" %% "phobos-core" % "0.21.0"

Then try this code out in sbt console or in a separate source file:

import ru.tinkoff.phobos.decoding._
import ru.tinkoff.phobos.encoding._
import ru.tinkoff.phobos.syntax._
import ru.tinkoff.phobos.derivation.semiauto._

case class TravelPoint(country: String, city: String)
object TravelPoint {
  implicit val travelPointElementEncoder: ElementEncoder[TravelPoint] = deriveElementEncoder
  implicit val travelPointElementDecoder: ElementDecoder[TravelPoint] = deriveElementDecoder
}

case class Price(@attr currency: String, @text value: Double)
object Price {
  implicit val priceElementEncoder: ElementEncoder[Price] = deriveElementEncoder
  implicit val priceElementDecoder: ElementDecoder[Price] = deriveElementDecoder
}

case class Journey(price: Price, departure: TravelPoint, arrival: TravelPoint)
object Journey {
  implicit val journeyXmlEncoder: XmlEncoder[Journey] = deriveXmlEncoder("journey")
  implicit val journeyXmlDecoder: XmlDecoder[Journey] = deriveXmlDecoder("journey")
}


val journey =
  Journey(
    price = Price("EUR", 1000.0),
    departure = TravelPoint("France", "Marcelle"),
    arrival = TravelPoint("Germany", "Munich")
  )

val xml = XmlEncoder[Journey].encode(journey)
println(xml)

val decodedJourney = xml.flatMap(XmlDecoder[Journey].decode(_))
println(decodedJourney)

assert(Right(journey) == decodedJourney)

Please see phobos wiki for explanation of the syntax and more details.

Performance details can be found out in phobos-benchmark repository.

There are several additional modules for some specific cases. These modules could be added with command below:

libraryDependencies += "ru.tinkoff" %% "phobos-<module>" % "0.21.0"

Where <module> is module name.

Module name Functionality core-3-0 Core module compiled for Scala 3.0. ast Support for parsing XML into AST akka-http Marshallers and unmarshallers for akka-http akka-stream Streaming decoding support for akka-stream cats Cats instances derevo Separate derivation of encoders and decoders separately using derevo annotations (e.g. @derive(xmlEncoder("foo"))) enumeratum Support for enumeratum enums fs2 Streaming decoding support (Stream[F, Array[Byte]] => G[A]). Latest fs2 version (fs2 3.x, cats effect 3.x) fs2-ce2 Streaming decoding support (Stream[F, Array[Byte]] => G[A]). Same as fs2 module, but for fs2 version 2.x using cats effect 2.x monix Streaming decoding support (Observable[Array[Byte]] => Task[A]) refined Support for refined

Most modules support Scala 2.12, 2.13 and 3. Dependencies for some modules don't support Scala 3, thus these modules support only Scala 2.x.

Detailed information about supported Scala versions is in the table below. Available versions for modules are marked with ✓.

Module name 2.12 2.13 3 core ✓ ✓ ✓ akka-http ✓ ✓ akka-stream ✓ ✓ ✓ ast ✓ ✓ cats ✓ ✓ ✓ derevo ✓ ✓ enumeratum ✓ ✓ fs2 ✓ ✓ ✓ fs2-ce2 ✓ ✓ ✓ monix ✓ ✓ ✓ refined ✓ ✓ XSD and WSDL code-generation support

Classes from XSD could be generated using deimos library.


RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4