A simple YAML parsing and stringifying library for MoonBit, support a simplified YAML subset which can be convert to JSON.
///|
test {
let source =
#|%YAML 1.2
#|---
#|YAML: YAML Ain't Markup Language™
#|
#|What It Is:
#| YAML is a human-friendly data serialization
#| language for all programming languages.
#|
#|YAML Resources:
#| YAML Specifications:
#| - YAML 1.2:
#| - Revision 1.2.2 # Oct 1, 2021 *New*
#| - Revision 1.2.1 # Oct 1, 2009
#| - Revision 1.2.0 # Jul 21, 2009
#| - YAML 1.1
#| - YAML 1.0
json_inspect(@yaml.Yaml::load_from_string(source), content=[
{
"YAML": "YAML Ain't Markup Language™",
"What It Is": "YAML is a human-friendly data serialization language for all programming languages.",
"YAML Resources": {
"YAML Specifications": [
{ "YAML 1.2": ["Revision 1.2.2", "Revision 1.2.1", "Revision 1.2.0"] },
"YAML 1.1",
"YAML 1.0",
],
},
},
])
}///|
test {
let source =
#|%YAML 1.2
#|---
#|YAML: YAML Ain't Markup Language™
#|
#|What It Is:
#| YAML is a human-friendly data serialization
#| language for all programming languages.
#|
#|YAML Resources:
#| YAML Specifications:
#| - YAML 1.2:
#| - Revision 1.2.2 # Oct 1, 2021 *New*
#| - Revision 1.2.1 # Oct 1, 2009
#| - Revision 1.2.0 # Jul 21, 2009
#| - YAML 1.1
#| - YAML 1.0
json_inspect(@yaml.Yaml::load_from_string(source), content=[
{
"YAML": "YAML Ain't Markup Language™",
"What It Is": "YAML is a human-friendly data serialization language for all programming languages.",
"YAML Resources": {
"YAML Specifications": [
{ "YAML 1.2": ["Revision 1.2.2", "Revision 1.2.1", "Revision 1.2.0"] },
"YAML 1.1",
"YAML 1.0",
],
},
},
])
}a: b
c:
d: e
f:
- g
- hStreamStart, DocumentStart, MappingStart,
Scalar("a", ..), Scalar("b", ..)
Scalar("c", ..), MappingStart, Scalar("d", ..), Scalar("e", ..), MappingEnd,
Scalar("f", ..), SequenceStart, Scalar("g", ..), Scalar("h", ..), SequenceEnd,
MappingEnd, DocumentEnd, StreamEndpub enum Event {
StreamStart
StreamEnd
DocumentStart
DocumentEnd
Alias(Int)
Scalar(String, TScalarStyle, Int, Tag?)
SequenceStart(Int, Tag?)
SequenceEnd
MappingStart(Int, Tag?)
MappingEnd
}pub struct Marker {
index : Int
line : Int
col : Int
}type Parser%TAG !prefix! tag:example.com,2011:
--- !prefix!A
a: b
--- !prefix!B
c: d
--- !prefix!C
e: ffn[R : MarkedEventReceiver] Parser::load(self : Parser, recv : R, multi : Bool) -> Unit raise YamlErrorpub enum TScalarStyle {
Plain
SingleQuoted
DoubleQuoted
Literal
Folded
}pub struct Tag {
handle : String
suffix : String
}type YamlEmitterlet input = "a: b\nc: d"
let docs = Yaml::load_from_string(input)
let emitter = YamlEmitter::new()
emitter.dump(docs[0])
let output = emitter.to_string()
// output == "---\na: b\nc: d"let input = "{foo: \"bar!\\nbar!\", baz: 42}"
let parsed = Yaml::load_from_string(input)
let emitter = YamlEmitter::new()
emitter.multiline_strings(true)
emitter.dump(parsed[0])
let output = emitter.to_string()
// output is:
// ---
// foo: |-
// bar!
// bar!
// baz: 42A simple YAML parsing and stringifying library for MoonBit, support a simplified YAML subset which can be convert to JSON.