mirror of
https://github.com/Buriburizaem0n/nezha_domains.git
synced 2026-09-19 09:40:12 +00:00
82 lines
1.9 KiB
Go
82 lines
1.9 KiB
Go
package workflowpolicy
|
|
|
|
import (
|
|
"strconv"
|
|
"strings"
|
|
|
|
"gopkg.in/yaml.v3"
|
|
)
|
|
|
|
func mappingValue(mapping *yaml.Node, key string) (*yaml.Node, bool) {
|
|
if mapping == nil || mapping.Kind != yaml.MappingNode {
|
|
return nil, false
|
|
}
|
|
for index := 0; index < len(mapping.Content); index += 2 {
|
|
if mapping.Content[index].Value == key {
|
|
return mapping.Content[index+1], true
|
|
}
|
|
}
|
|
return nil, false
|
|
}
|
|
|
|
func mappingEntries(mapping *yaml.Node) [][2]*yaml.Node {
|
|
if mapping == nil || mapping.Kind != yaml.MappingNode {
|
|
return nil
|
|
}
|
|
entries := make([][2]*yaml.Node, 0, len(mapping.Content)/2)
|
|
for index := 0; index < len(mapping.Content); index += 2 {
|
|
entries = append(entries, [2]*yaml.Node{mapping.Content[index], mapping.Content[index+1]})
|
|
}
|
|
return entries
|
|
}
|
|
|
|
func scalarString(node *yaml.Node) (string, bool) {
|
|
if node == nil || node.Kind != yaml.ScalarNode || node.Tag != "!!str" {
|
|
return "", false
|
|
}
|
|
return node.Value, true
|
|
}
|
|
|
|
func explicitFalse(node *yaml.Node) bool {
|
|
if node == nil || node.Kind != yaml.ScalarNode || node.Tag != "!!bool" {
|
|
return false
|
|
}
|
|
return strings.EqualFold(strings.TrimSpace(node.Value), "false")
|
|
}
|
|
|
|
func positiveInteger(node *yaml.Node) bool {
|
|
if node == nil || node.Kind != yaml.ScalarNode || node.Tag != "!!int" {
|
|
return false
|
|
}
|
|
value, err := strconv.Atoi(node.Value)
|
|
return err == nil && value > 0
|
|
}
|
|
|
|
func walkScalars(node *yaml.Node, visit func(*yaml.Node)) {
|
|
if node.Kind == yaml.ScalarNode {
|
|
visit(node)
|
|
}
|
|
for _, child := range node.Content {
|
|
walkScalars(child, visit)
|
|
}
|
|
}
|
|
|
|
func walkMappings(node *yaml.Node, visit func(*yaml.Node)) {
|
|
if node.Kind == yaml.MappingNode {
|
|
visit(node)
|
|
}
|
|
for _, child := range node.Content {
|
|
walkMappings(child, visit)
|
|
}
|
|
}
|
|
|
|
func containsScalar(node *yaml.Node, expected string) bool {
|
|
found := false
|
|
walkScalars(node, func(scalar *yaml.Node) {
|
|
if scalar.Value == expected {
|
|
found = true
|
|
}
|
|
})
|
|
return found
|
|
}
|