glaml
Types
A Document Error dispatched by yamerl.
It contains a string - msg
and a tuple of 2 integers - loc
.
The location is: #(line, column)
.
pub type DocError {
DocError(msg: String, loc: #(Int, Int))
}
Constructors
-
DocError(msg: String, loc: #(Int, Int))
pub type DocNode {
DocNodeNil
DocNodeBool(bool: Bool)
DocNodeStr(string: String)
DocNodeInt(int: Int)
DocNodeFloat(float: Float)
DocNodeSeq(nodes: List(DocNode))
DocNodeMap(nodes: List(#(DocNode, DocNode)))
}
Constructors
-
DocNodeNil
-
DocNodeBool(bool: Bool)
-
DocNodeStr(string: String)
-
DocNodeInt(int: Int)
-
DocNodeFloat(float: Float)
-
DocNodeSeq(nodes: List(DocNode))
-
DocNodeMap(nodes: List(#(DocNode, DocNode)))
pub type NodeGetError {
NodeNotFound(which: String)
InvalidSugar
}
Constructors
-
NodeNotFound(which: String)
-
InvalidSugar
Functions
pub fn get(
from node: DocNode,
to path: List(PathRule),
) -> Result(DocNode, NodeGetError)
Traverses the DocNode
and tries to find another DocNode
by matching the PathRule
s.
Example
let assert Ok(doc) = parse_string("
employees:
- name: Gordon
surname: Befrey
field: Database Infrastructure
- name: Caroline
surname: Gaster
field: Networking
")
let doc = doc_node(doc)
get(doc, [Map("employees"), Seq(0), Map("field")])
// -> Ok(DocNodeStr("Database Infrastructure"))
get(doc, [Map("employees"), Seq(1), Map("passwords"), Seq(0)])
// ~~~~~~~~~~~~~~~~
// | reading backwards
// -> Error(NodeNotFound("reverse_idx:1,map:passwords"))
pub fn parse_file(path: String) -> Result(Document, DocError)
Parses the YAML file at path
and returns either Ok(Document(...))
or Error(DocError(...))
.
pub fn parse_string(string: String) -> Result(Document, DocError)
Parses the YAML string and returns either Ok(Document(...))
or Error(DocError(...))
.
pub fn sugar(
from node: DocNode,
to path: String,
) -> Result(DocNode, NodeGetError)
Does the same thing as get
but instead of a list of PathRule
s,
you write a String
that will get parsed into a list of PathRule
s for you.
Syntax
"some_key" == [Map("some_key")]
"#0" == [Seq(0)]
"combination.#0.of.these" == [Map("combination"), Seq(0), Map("of"), Map("these")]
// You can write as many dots as you want - an empty key points at the current node.
"...test..#0." == [Map("test"), Seq(0)]