summaryrefslogtreecommitdiff
path: root/crashboxd/src/main/scala/io/crashbox/ci/yaml/SimpleReaders.scala
diff options
context:
space:
mode:
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.scala46
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)
+
+}