summaryrefslogtreecommitdiff
path: root/crashboxd/src/main/scala/io/crashbox/ci/yaml/CompositeReaders.scala
blob: 4df72e13ecc08d91930c24c24913e602bac2223a (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
package io.crashbox.ci
package yaml

trait CompositeReaders {

  implicit def mapReader[V: YamlReader] = new YamlReader[Map[String, V]] {
    override def read(yml: YamlValue) = yml match {
      case YamlMap(m) =>
        m.map {
          case (key, value) =>
            key -> value.convertTo[V]
        }
      case YamlString.Empty => Map.empty[String, V]
      case _ => formatError(yml, "mapping")
    }
  }

  implicit def seqReader[A: YamlReader] = new YamlReader[Seq[A]] {
    override def read(yml: YamlValue) = yml match {
      case YamlSeq(elements) =>
        elements.map { v =>
          v.convertTo[A]
        }
      case YamlString.Empty => Seq.empty[A]
      case _ => formatError(yml, "sequence")
    }
  }

}