d
This commit is contained in:
@@ -5,7 +5,6 @@ import (
|
||||
"fmt"
|
||||
"os"
|
||||
"reflect"
|
||||
"strconv"
|
||||
|
||||
"gopkg.in/yaml.v3"
|
||||
)
|
||||
@@ -52,7 +51,7 @@ func GetYamlConfig() *YamlConfig {
|
||||
return &yamlConfig
|
||||
}
|
||||
|
||||
var mapYaml map[string]interface{}
|
||||
//var mapYaml map[string]interface{}
|
||||
|
||||
func ReadParamConfig(fileName string) *map[string]interface{} {
|
||||
file, err := os.ReadFile(fileName)
|
||||
@@ -60,7 +59,17 @@ func ReadParamConfig(fileName string) *map[string]interface{} {
|
||||
fmt.Println("yamlFile.Get err", err)
|
||||
}
|
||||
|
||||
mapYaml = make(map[string]interface{})
|
||||
mapYaml := make(map[string]interface{})
|
||||
|
||||
// var node yaml.Node
|
||||
// err = yaml.Unmarshal(file, &node)
|
||||
// if err != nil {
|
||||
// fmt.Printf("yaml.Unmarshal: %v when to struct", err)
|
||||
// }
|
||||
// err = unmarshalNode(&node, &mapYaml)
|
||||
// if err != nil {
|
||||
// fmt.Println("Failed to unmarshalNode:", err)
|
||||
// }
|
||||
|
||||
// var node yaml.Node
|
||||
// err = yaml.Unmarshal(file, &node)
|
||||
@@ -135,91 +144,102 @@ func init() {
|
||||
fmt.Println("pfiles:", pfiles)
|
||||
}
|
||||
|
||||
// func unmarshalNode(node *yaml.Node, out interface{}) error {
|
||||
// switch node.Kind {
|
||||
// case yaml.DocumentNode:
|
||||
// return unmarshalNode(node.Content[0], out)
|
||||
// case yaml.MappingNode:
|
||||
// m := nodeToMap(node)
|
||||
// return unmarshalMap(m, out)
|
||||
// case yaml.SequenceNode:
|
||||
// s := nodeToSlice(node)
|
||||
// return unmarshalSlice(s, out)
|
||||
// case yaml.ScalarNode:
|
||||
// return unmarshalScalar(node, out)
|
||||
// default:
|
||||
// return fmt.Errorf("unknown node kind: %v", node.Kind)
|
||||
// }
|
||||
// }
|
||||
func unmarshalNode(node *yaml.Node, out interface{}) error {
|
||||
switch node.Kind {
|
||||
case yaml.DocumentNode:
|
||||
return unmarshalNode(node.Content[0], out)
|
||||
case yaml.MappingNode:
|
||||
m := nodeToMap(node)
|
||||
return unmarshalMap(m, out)
|
||||
case yaml.SequenceNode:
|
||||
s := nodeToSlice(node)
|
||||
return unmarshalSlice(s, out)
|
||||
case yaml.ScalarNode:
|
||||
return unmarshalScalar(node, out)
|
||||
default:
|
||||
return fmt.Errorf("unknown node kind: %v", node.Kind)
|
||||
}
|
||||
}
|
||||
|
||||
// func nodeToMap(node *yaml.Node) map[string]*yaml.Node {
|
||||
// m := make(map[string]*yaml.Node)
|
||||
// for i := 0; i < len(node.Content); i += 2 {
|
||||
// key := node.Content[i].Value
|
||||
// value := node.Content[i+1]
|
||||
// m[key] = value
|
||||
// }
|
||||
// return m
|
||||
// }
|
||||
func nodeToMap(node *yaml.Node) map[string]*yaml.Node {
|
||||
m := make(map[string]*yaml.Node)
|
||||
for i := 0; i < len(node.Content); i += 2 {
|
||||
key := node.Content[i].Value
|
||||
value := node.Content[i+1]
|
||||
m[key] = value
|
||||
}
|
||||
return m
|
||||
}
|
||||
|
||||
// func unmarshalMap(m map[string]*yaml.Node, out interface{}) error {
|
||||
// data, ok := out.(*map[string]interface{})
|
||||
// if !ok {
|
||||
// return fmt.Errorf("out must be a map[string]interface{}")
|
||||
// }
|
||||
func unmarshalMap(m map[string]*yaml.Node, out interface{}) error {
|
||||
data, ok := out.(*map[string]interface{})
|
||||
if !ok {
|
||||
return fmt.Errorf("out must be a map[string]interface{}")
|
||||
}
|
||||
|
||||
// *data = make(map[string]interface{})
|
||||
// for key, value := range m {
|
||||
// var v interface{}
|
||||
// err := unmarshalNode(value, &v)
|
||||
// if err != nil {
|
||||
// return err
|
||||
// }
|
||||
// (*data)[key] = v
|
||||
// }
|
||||
// return nil
|
||||
// }
|
||||
*data = make(map[string]interface{})
|
||||
for key, value := range m {
|
||||
var v interface{}
|
||||
err := unmarshalNode(value, &v)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
(*data)[key] = v
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// func nodeToSlice(node *yaml.Node) []*yaml.Node {
|
||||
// return node.Content
|
||||
// }
|
||||
func nodeToSlice(node *yaml.Node) []*yaml.Node {
|
||||
return node.Content
|
||||
}
|
||||
|
||||
// func unmarshalSlice(s []*yaml.Node, out interface{}) error {
|
||||
// data, ok := out.(*[]interface{})
|
||||
// if !ok {
|
||||
// return fmt.Errorf("out must be a []interface{}")
|
||||
// }
|
||||
func unmarshalSlice(s []*yaml.Node, out interface{}) error {
|
||||
data, ok := out.(*[]interface{})
|
||||
if !ok {
|
||||
return fmt.Errorf("out must be a []interface{}")
|
||||
}
|
||||
|
||||
// *data = make([]interface{}, len(s))
|
||||
// for i, value := range s {
|
||||
// var v interface{}
|
||||
// err := unmarshalNode(value, &v)
|
||||
// if err != nil {
|
||||
// return err
|
||||
// }
|
||||
// (*data)[i] = v
|
||||
// }
|
||||
// return nil
|
||||
// }
|
||||
*data = make([]interface{}, len(s))
|
||||
for i, value := range s {
|
||||
var v interface{}
|
||||
err := unmarshalNode(value, &v)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
(*data)[i] = v
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// func unmarshalScalar(node *yaml.Node, out interface{}) error {
|
||||
// switch node.Tag {
|
||||
// case "!!str":
|
||||
// *out = node.Value
|
||||
// case "!!int":
|
||||
// *out = node.Value
|
||||
// case "!!float":
|
||||
// *out = node.Value
|
||||
// case "!!bool":
|
||||
// *out = node.Value == "true"
|
||||
// case "!!null":
|
||||
// *out = nil
|
||||
// default:
|
||||
// return fmt.Errorf("unknown scalar tag: %v", node.Tag)
|
||||
// }
|
||||
// return nil
|
||||
// }
|
||||
func unmarshalScalar(node *yaml.Node, out interface{}) error {
|
||||
switch node.Tag {
|
||||
case "!!str":
|
||||
val := reflect.ValueOf(node.Value)
|
||||
val.Elem().Set(reflect.ValueOf(out))
|
||||
//*out = node.Value
|
||||
case "!!int":
|
||||
val := reflect.ValueOf(node.Value)
|
||||
val.Elem().Set(reflect.ValueOf(out))
|
||||
//*out = node.Value
|
||||
case "!!float":
|
||||
val := reflect.ValueOf(node.Value)
|
||||
val.Elem().Set(reflect.ValueOf(out))
|
||||
//*out = node.Value
|
||||
case "!!bool":
|
||||
val := reflect.ValueOf(node.Value == "true")
|
||||
val.Elem().Set(reflect.ValueOf(out))
|
||||
//*out = node.Value == "true"
|
||||
case "!!null":
|
||||
val := reflect.ValueOf(node.Value)
|
||||
val.Elem().Set(reflect.ValueOf(out))
|
||||
//*out = nil
|
||||
default:
|
||||
return fmt.Errorf("unknown scalar tag: %v", node.Tag)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
/*
|
||||
func unmarshalNode(node *yaml.Node, out reflect.Value) error {
|
||||
switch node.Kind {
|
||||
case yaml.DocumentNode:
|
||||
@@ -352,3 +372,4 @@ func unmarshalScalar(node *yaml.Node, out reflect.Value) error {
|
||||
}
|
||||
return nil
|
||||
}
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user