Skip to content

Commit

Permalink
Merge pull request casualjim#1 from paulvollmer/master
Browse files Browse the repository at this point in the history
Make it idiomatic
  • Loading branch information
casualjim committed Jan 29, 2017
2 parents 0185b30 + cf61c4e commit 9d0f126
Show file tree
Hide file tree
Showing 3 changed files with 67 additions and 61 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ go get -u github.com/casualjim/yaml2json
## Use

```
sage of yaml2json:
Usage of yaml2json:
yaml2json [YAML FILE OR URL]
Expand Down
63 changes: 3 additions & 60 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,13 @@ import (
"encoding/json"
"flag"
"fmt"
"github.com/casualjim/yaml2json/src"
"io/ioutil"
"log"
"net/http"
"os"
"strconv"
"strings"
"time"

yaml "gopkg.in/yaml.v2"
)

// LoadHTTPTimeout the default timeout for load requests
Expand Down Expand Up @@ -96,69 +94,14 @@ func loadHTTPBytes(timeout time.Duration) func(path string) ([]byte, error) {
}
}

// YAMLToJSON converts YAML unmarshaled data into json compatible data
func YAMLToJSON(data interface{}) (json.RawMessage, error) {
jm, err := transformData(data)
if err != nil {
return nil, err
}
b, err := json.MarshalIndent(jm, "", " ")
return json.RawMessage(b), err
}

func bytesToYAMLDoc(data []byte) (interface{}, error) {
var document map[interface{}]interface{}
if err := yaml.Unmarshal(data, &document); err != nil {
return nil, err
}

return document, nil
}

func transformData(in interface{}) (out interface{}, err error) {
switch in.(type) {
case map[interface{}]interface{}:
o := make(map[string]interface{})
for k, v := range in.(map[interface{}]interface{}) {
sk := ""
switch k.(type) {
case string:
sk = k.(string)
case int:
sk = strconv.Itoa(k.(int))
default:
return nil, fmt.Errorf("types don't match: expect map key string or int get: %T", k)
}
v, err = transformData(v)
if err != nil {
return nil, err
}
o[sk] = v
}
return o, nil
case []interface{}:
in1 := in.([]interface{})
len1 := len(in1)
o := make([]interface{}, len1)
for i := 0; i < len1; i++ {
o[i], err = transformData(in1[i])
if err != nil {
return nil, err
}
}
return o, nil
}
return in, nil
}

// YAMLDoc loads a yaml document from either http or a file and converts it to json
func YAMLDoc(path string) (json.RawMessage, error) {
yamlDoc, err := YAMLData(path)
if err != nil {
return nil, err
}

data, err := YAMLToJSON(yamlDoc)
data, err := yaml2json.YAMLToJSON(yamlDoc)
if err != nil {
return nil, err
}
Expand All @@ -173,5 +116,5 @@ func YAMLData(path string) (interface{}, error) {
return nil, err
}

return bytesToYAMLDoc(data)
return yaml2json.BytesToYAMLDoc(data)
}
63 changes: 63 additions & 0 deletions src/yaml2json.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
package yaml2json

import (
"encoding/json"
"fmt"
yaml "gopkg.in/yaml.v2"
"strconv"
)

// YAMLToJSON converts YAML unmarshaled data into json compatible data
func YAMLToJSON(data interface{}) (json.RawMessage, error) {
jm, err := transformData(data)
if err != nil {
return nil, err
}
b, err := json.MarshalIndent(jm, "", " ")
return json.RawMessage(b), err
}

func BytesToYAMLDoc(data []byte) (interface{}, error) {
var document map[interface{}]interface{}
if err := yaml.Unmarshal(data, &document); err != nil {
return nil, err
}

return document, nil
}

func transformData(in interface{}) (out interface{}, err error) {
switch in.(type) {
case map[interface{}]interface{}:
o := make(map[string]interface{})
for k, v := range in.(map[interface{}]interface{}) {
sk := ""
switch k.(type) {
case string:
sk = k.(string)
case int:
sk = strconv.Itoa(k.(int))
default:
return nil, fmt.Errorf("types don't match: expect map key string or int get: %T", k)
}
v, err = transformData(v)
if err != nil {
return nil, err
}
o[sk] = v
}
return o, nil
case []interface{}:
in1 := in.([]interface{})
len1 := len(in1)
o := make([]interface{}, len1)
for i := 0; i < len1; i++ {
o[i], err = transformData(in1[i])
if err != nil {
return nil, err
}
}
return o, nil
}
return in, nil
}

0 comments on commit 9d0f126

Please sign in to comment.