diff options
author | Jakob Odersky <jakob@odersky.com> | 2017-04-01 13:21:15 -0700 |
---|---|---|
committer | Jakob Odersky <jakob@odersky.com> | 2017-04-01 13:21:15 -0700 |
commit | 26aa8adc30a84d983d020e34b488ac22a31cb544 (patch) | |
tree | 5e2cee54da5f64011f56a85c4b09bd1add4eacc7 /crashboxd/src/main/scala/io/crashbox/ci/yaml/Yaml.scala | |
parent | 8a4ebe76200a2e570bd959d8780c3c0a0bf71d5c (diff) | |
download | crashbox-ci-26aa8adc30a84d983d020e34b488ac22a31cb544.tar.gz crashbox-ci-26aa8adc30a84d983d020e34b488ac22a31cb544.tar.bz2 crashbox-ci-26aa8adc30a84d983d020e34b488ac22a31cb544.zip |
Add yaml parser and docker executor
Diffstat (limited to 'crashboxd/src/main/scala/io/crashbox/ci/yaml/Yaml.scala')
-rw-r--r-- | crashboxd/src/main/scala/io/crashbox/ci/yaml/Yaml.scala | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/crashboxd/src/main/scala/io/crashbox/ci/yaml/Yaml.scala b/crashboxd/src/main/scala/io/crashbox/ci/yaml/Yaml.scala new file mode 100644 index 0000000..0370c76 --- /dev/null +++ b/crashboxd/src/main/scala/io/crashbox/ci/yaml/Yaml.scala @@ -0,0 +1,36 @@ +package io.crashbox.ci +package yaml + +import java.util.{List => JList, Map => JMap} + +import scala.collection.JavaConverters._ + +import org.yaml.snakeyaml.{DumperOptions, Yaml => SYaml} +import org.yaml.snakeyaml.constructor.Constructor +import org.yaml.snakeyaml.representer.Representer +import org.yaml.snakeyaml.resolver.Resolver + +object Yaml { + + private def toYaml(yml: Any): YamlValue = yml match { + case m: JMap[_, _] => + YamlMap(m.asScala.toMap.map { case (k, v) => k.toString -> toYaml(v) }) + case l: JList[_] => YamlSeq(l.asScala.toList.map(toYaml(_))) + case s: String => YamlString(s) + case other => throw new YamlFormatException("Unknown YAML type: " + other) + } + + /** Strict parsing */ + def parse(data: String): YamlValue = { + val resolver = new Resolver { + override def addImplicitResolvers: Unit = {} + } + val yml = new SYaml(new Constructor(), + new Representer(), + new DumperOptions(), + resolver) + val node = yml.load(data) + toYaml(node) + } + +} |