ZIO JSON
Codecs for ZIO JSON.
libraryDependencies += "africa.shuwari" %% /* or `%%%` */ "version-codecs-zio" % "0.6.2"
Usage
import zio.json.*
import version.*
import version.codecs.zio.given
// Encode
val v = "1.2.3-alpha.1".toVersionUnsafe
val json = v.toJson // "1.2.3-alpha.1"
// Decode
val decoded = json.fromJson[Version]
// Right(Version(1, 2, 3, Some(alpha.1), None))
In Data Structures
import zio.json.*
case class Package(name: String, version: Version) derives JsonCodec
val pkg = Package("my-lib", "1.0.0".toVersionUnsafe)
pkg.toJson
// {"name":"my-lib","version":"1.0.0"}
Provided Codecs
given JsonCodec[Version]
given JsonCodec[MajorVersion]
given JsonCodec[MinorVersion]
given JsonCodec[PatchNumber]
given JsonCodec[PreReleaseNumber]
given JsonCodec[PreReleaseClassifier]
given JsonCodec[PreRelease]
given JsonCodec[Metadata]
Error Handling
"invalid".fromJson[Version]
// Left("Expected '\"' but found 'i'")
"\"not-a-version\"".fromJson[Version]
// Left("Invalid version format: not-a-version")
In this article