scala-yaml
Codecs for scala-yaml.
libraryDependencies += "africa.shuwari" %% /* or `%%%` */ "version-codecs-yaml" % "0.6.2"
Usage
import org.virtuslab.yaml.*
import version.*
import version.codecs.yaml.given
// Encode
val v = "1.2.3-alpha.1".toVersionUnsafe
val yaml = v.asYaml // 1.2.3-alpha.1
// Decode
val decoded = yaml.as[Version]
// Right(Version(1, 2, 3, Some(alpha.1), None))
In Data Structures
import org.virtuslab.yaml.*
case class Package(name: String, version: Version) derives YamlCodec
val pkg = Package("my-lib", "1.0.0".toVersionUnsafe)
pkg.asYaml
// name: my-lib
// version: 1.0.0
Provided Codecs
given YamlCodec[Version]
given YamlCodec[MajorVersion]
given YamlCodec[MinorVersion]
given YamlCodec[PatchNumber]
given YamlCodec[PreReleaseNumber]
given YamlCodec[PreReleaseClassifier]
given YamlCodec[PreRelease]
given YamlCodec[Metadata]
YAML Examples
# Simple version
version: 1.2.3
# Pre-release
version: 1.2.3-alpha.1
# With build metadata
version: 1.2.3+build.456
# Full form
version: 1.2.3-rc.1+sha.abc123
Error Handling
"not-a-version".as[Version]
// Left(YamlError: Invalid version format: not-a-version)
In this article