-
Notifications
You must be signed in to change notification settings - Fork 22
/
SerializerImpl.scala
32 lines (26 loc) · 1.18 KB
/
SerializerImpl.scala
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
30
31
32
package org.virtuslab.yaml.internal.dump.serialize
import org.virtuslab.yaml.Node
import org.virtuslab.yaml.Range
import org.virtuslab.yaml.internal.load.parse.EventKind
import org.virtuslab.yaml.internal.load.parse.EventKind._
object SerializerImpl extends Serializer {
override def toEvents(node: Node): Seq[EventKind] =
Seq(DocumentStart()) ++ convertNode(node) ++ Seq(DocumentEnd())
private def convertNode(node: Node) = node match {
case scalar: Node.ScalarNode => convertScalarNode(scalar)
case mapping: Node.MappingNode => convertMappingNode(mapping)
case sequence: Node.SequenceNode => convertSequenceNode(sequence)
}
private def convertMappingNode(node: Node.MappingNode): Seq[EventKind] = {
val events = node.mappings.toSeq.flatMap { case (k, v) =>
Seq(convertNode(k), convertNode(v))
}.flatten
Seq(MappingStart()) ++ events ++ Seq(MappingEnd)
}
private def convertSequenceNode(node: Node.SequenceNode): Seq[EventKind] = {
val events = node.nodes.map(convertNode(_)).flatten
Seq(SequenceStart()) ++ events ++ Seq(SequenceEnd)
}
private def convertScalarNode(node: Node.ScalarNode): Seq[EventKind] =
Seq(Scalar(node.value))
}