jsoniter-scala

Codecs for jsoniter-scala.

libraryDependencies += "africa.shuwari" %%  /* or `%%%` */ "version-codecs-jsoniter" % "0.6.2"

Usage

import com.github.plokhotnyuk.jsoniter_scala.core.*
import com.github.plokhotnyuk.jsoniter_scala.macros.*
import version.*
import version.codecs.jsoniter.given

// Encode
val v = "1.2.3-alpha.1".toVersionUnsafe
val json = writeToString(v) // "1.2.3-alpha.1"

// Decode
val decoded = readFromString[Version](json)
// Version(1, 2, 3, Some(alpha.1), None)

In Data Structures

case class Package(name: String, version: Version)

object Package:
  given JsonValueCodec[Package] = JsonCodecMaker.make

val pkg = Package("my-lib", "1.0.0".toVersionUnsafe)
writeToString(pkg)
// {"name":"my-lib","version":"1.0.0"}

Provided Codecs

given JsonValueCodec[Version]
given JsonValueCodec[MajorVersion]
given JsonValueCodec[MinorVersion]
given JsonValueCodec[PatchNumber]
given JsonValueCodec[PreReleaseNumber]
given JsonValueCodec[PreReleaseClassifier]
given JsonValueCodec[PreRelease]
given JsonValueCodec[Metadata]

Error Handling

import scala.util.Try

Try(readFromString[Version]("invalid"))
// Failure(JsonReaderException: ...expected '"'...)

Try(readFromString[Version]("\"not-a-version\""))
// Failure(JsonReaderException: ...invalid version...)