diff options
Diffstat (limited to 'crashboxd/src/main/scala/io/crashbox/ci/yaml/SimpleReaders.scala')
-rw-r--r-- | crashboxd/src/main/scala/io/crashbox/ci/yaml/SimpleReaders.scala | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/crashboxd/src/main/scala/io/crashbox/ci/yaml/SimpleReaders.scala b/crashboxd/src/main/scala/io/crashbox/ci/yaml/SimpleReaders.scala new file mode 100644 index 0000000..df30a33 --- /dev/null +++ b/crashboxd/src/main/scala/io/crashbox/ci/yaml/SimpleReaders.scala @@ -0,0 +1,46 @@ +package io.crashbox.ci +package yaml + +import scala.util.Try + +trait SimpleReaders { + + class YamlStringReader[A](expected: String)(extract: String => Option[A]) + extends YamlReader[A] { + def read(yml: YamlValue) = yml match { + case YamlString(value) => + extract(value) match { + case Some(a) => a + case None => + throw new YamlFormatException( + s"""expected $expected, but found string type "$value"""") + } + case _ => formatError(yml, expected) + } + } + + implicit object valueReader extends YamlReader[YamlValue] { + def read(yaml: YamlValue) = yaml + } + + implicit object stringReader + extends YamlStringReader[String]("string")(s => Some(s)) + + implicit object byteReader + extends YamlStringReader[Byte]("byte")(s => Try { s.toByte }.toOption) + implicit object shortReader + extends YamlStringReader[Short]("short")(s => Try { s.toShort }.toOption) + implicit object intReader + extends YamlStringReader[Int]("integer")(s => Try { s.toInt }.toOption) + implicit object longReader + extends YamlStringReader[Long]("long")(s => Try { s.toLong }.toOption) + implicit object floatReader + extends YamlStringReader[Float]("float")(s => Try { s.toFloat }.toOption) + implicit object doubleReader + extends YamlStringReader[Double]("double")(s => + Try { s.toDouble }.toOption) + implicit object booleanReader + extends YamlStringReader[Boolean]("boolean")(s => + Try { s.toBoolean }.toOption) + +} |