1- // a Go package to interact with arbitrary YAML.
1+ // Package simpleyaml: a Go package to interact with arbitrary YAML.
22//
33// Example:
44// var data = []byte(`
2727// // y.Get("bb").Get("cc").Get("dd").Array()
2828// // y.Get("bb").Get("cc").Get("dd").GetIndex(1).Int()
2929// // y.GetPath("bb", "cc", "ee").String()
30+
3031package simpleyaml
3132
3233import (
3334 "errors"
35+
3436 "gopkg.in/yaml.v2"
3537)
3638
@@ -41,19 +43,16 @@ type Yaml struct {
4143// NewYaml returns a pointer to a new `Yaml` object after unmarshaling `body` bytes
4244func NewYaml (body []byte ) (* Yaml , error ) {
4345 var val interface {}
44- err := yaml .Unmarshal (body , & val )
45- if err != nil {
46+ if err := yaml .Unmarshal (body , & val ); err != nil {
4647 return nil , errors .New ("unmarshal []byte to yaml failed: " + err .Error ())
4748 }
49+
4850 return & Yaml {val }, nil
4951}
5052
51- // Check if the given branch was found
53+ // IsFound Check if the given branch was found
5254func (y * Yaml ) IsFound () bool {
53- if y .data == nil {
54- return false
55- }
56- return true
55+ return y .data != nil
5756}
5857
5958// Get returns a pointer to a new `Yaml` object for `key` in its `map` representation
@@ -67,6 +66,7 @@ func (y *Yaml) Get(key interface{}) *Yaml {
6766 return & Yaml {val }
6867 }
6968 }
69+
7070 return & Yaml {nil }
7171}
7272
@@ -79,6 +79,7 @@ func (y *Yaml) GetPath(branch ...interface{}) *Yaml {
7979 for _ , p := range branch {
8080 yin = yin .Get (p )
8181 }
82+
8283 return yin
8384}
8485
@@ -87,21 +88,22 @@ func (y *Yaml) Array() ([]interface{}, error) {
8788 if a , ok := (y .data ).([]interface {}); ok {
8889 return a , nil
8990 }
91+
9092 return nil , errors .New ("type assertion to []interface{} failed" )
9193}
9294
9395func (y * Yaml ) IsArray () bool {
9496 _ , err := y .Array ()
95-
9697 return err == nil
9798}
9899
99- // return the size of array
100+ // GetArraySize return the size of array
100101func (y * Yaml ) GetArraySize () (int , error ) {
101102 a , err := y .Array ()
102103 if err != nil {
103104 return 0 , err
104105 }
106+
105107 return len (a ), nil
106108}
107109
@@ -117,6 +119,7 @@ func (y *Yaml) GetIndex(index int) *Yaml {
117119 return & Yaml {a [index ]}
118120 }
119121 }
122+
120123 return & Yaml {nil }
121124}
122125
@@ -125,6 +128,7 @@ func (y *Yaml) Int() (int, error) {
125128 if v , ok := (y .data ).(int ); ok {
126129 return v , nil
127130 }
131+
128132 return 0 , errors .New ("type assertion to int failed" )
129133}
130134
@@ -133,6 +137,7 @@ func (y *Yaml) Bool() (bool, error) {
133137 if v , ok := (y .data ).(bool ); ok {
134138 return v , nil
135139 }
140+
136141 return false , errors .New ("type assertion to bool failed" )
137142}
138143
@@ -141,13 +146,15 @@ func (y *Yaml) String() (string, error) {
141146 if v , ok := (y .data ).(string ); ok {
142147 return v , nil
143148 }
149+
144150 return "" , errors .New ("type assertion to string failed" )
145151}
146152
147153func (y * Yaml ) Float () (float64 , error ) {
148154 if v , ok := (y .data ).(float64 ); ok {
149155 return v , nil
150156 }
157+
151158 return 0 , errors .New ("type assertion to float64 failed" )
152159}
153160
@@ -156,27 +163,30 @@ func (y *Yaml) Map() (map[interface{}]interface{}, error) {
156163 if m , ok := (y .data ).(map [interface {}]interface {}); ok {
157164 return m , nil
158165 }
166+
159167 return nil , errors .New ("type assertion to map[interface]interface{} failed" )
160168}
161169
162- // Check if it is a map
170+ // IsMap Check if it is a map
163171func (y * Yaml ) IsMap () bool {
164172 _ , err := y .Map ()
165173 return err == nil
166174}
167175
168- // Get all the keys of the map
176+ // GetMapKeys Get all the keys of the map
169177func (y * Yaml ) GetMapKeys () ([]string , error ) {
170178 m , err := y .Map ()
171179
172180 if err != nil {
173181 return nil , err
174182 }
183+
175184 keys := make ([]string , 0 )
176185 for k , _ := range m {
177186 if s , ok := k .(string ); ok {
178187 keys = append (keys , s )
179188 }
180189 }
190+
181191 return keys , nil
182192}
0 commit comments