Some checks failed
SonarQube / SonarQube (push) Failing after 5m28s
E2e test on main branch push / server and client test (map[name:admin port:8080]) (push) Failing after 3m33s
Server and lib tests / Library test (js) (push) Failing after 1m36s
Server and lib tests / Library test (vue) (push) Successful in 2m24s
Server and lib tests / Web client test (admin) (push) Successful in 2m52s
Server and lib tests / Web client test (compose) (push) Successful in 3m23s
Server and lib tests / Web client test (discovery) (push) Successful in 2m49s
Server and lib tests / Web client test (one) (push) Successful in 2m52s
Server and lib tests / Web client test (privacy) (push) Successful in 2m44s
Server and lib tests / Web client test (reporter) (push) Successful in 2m56s
Server and lib tests / Web client test (workflow) (push) Successful in 3m0s
Server and lib tests / Server tests (push) Failing after 4m55s
E2e test on main branch push / notify-failure (push) Failing after 9s
Server and lib tests / Send matrix testing notification (push) Successful in 2s
Mark stale issues and pull requests / stale (push) Successful in 40s
60 lines
1.2 KiB
Go
60 lines
1.2 KiB
Go
package y7s
|
|
|
|
// y7s (YAML Utils)
|
|
|
|
import (
|
|
"gopkg.in/yaml.v3"
|
|
)
|
|
|
|
// eachKV iterates over map node
|
|
func EachMap(n *yaml.Node, fn func(*yaml.Node, *yaml.Node) error) error {
|
|
if !IsKind(n, yaml.MappingNode) {
|
|
// root node kind be mapping
|
|
return NodeErr(n, "expecting mapping node")
|
|
}
|
|
|
|
for i := 0; i < len(n.Content); i += 2 {
|
|
if err := fn(n.Content[i], n.Content[i+1]); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// eachKV iterates over sequence node
|
|
func EachSeq(n *yaml.Node, fn func(*yaml.Node) error) error {
|
|
if !IsKind(n, yaml.SequenceNode) {
|
|
// root node kind be mapping
|
|
return NodeErr(n, "expecting sequence node")
|
|
}
|
|
|
|
for i := 0; i < len(n.Content); i++ {
|
|
if err := fn(n.Content[i]); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// each helps iterate over mapping and sequence nodes fairly trivially
|
|
func Each(n *yaml.Node, fn func(*yaml.Node, *yaml.Node) error) error {
|
|
if IsKind(n, yaml.MappingNode) {
|
|
return EachMap(n, fn)
|
|
}
|
|
|
|
if IsKind(n, yaml.SequenceNode) {
|
|
var placeholder *yaml.Node
|
|
for i := 0; i < len(n.Content); i++ {
|
|
if err := fn(placeholder, n.Content[i]); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
return NodeErr(n, "expecting mapping or sequence node")
|
|
}
|