diff --git a/go.mod b/go.mod index a2a9e04c2..714f2934f 100644 --- a/go.mod +++ b/go.mod @@ -48,7 +48,9 @@ require ( google.golang.org/grpc v1.22.0 gopkg.in/go-playground/assert.v1 v1.2.1 // indirect gopkg.in/go-playground/validator.v9 v9.26.0 + gopkg.in/yaml.v2 v2.2.2 honnef.co/go/tools v0.0.0-20190605142022-0a11fc526260 // indirect + ) replace ( diff --git a/go.sum b/go.sum index f78aed5dd..b0075cdbd 100644 --- a/go.sum +++ b/go.sum @@ -112,6 +112,8 @@ github.com/tsuna/gohbase v0.0.0-20190201102810-d3184c1526df h1:jYiwqXfoRWU6pJMzC github.com/tsuna/gohbase v0.0.0-20190201102810-d3184c1526df/go.mod h1:3HfLQly3YNLGxNv/2YOfmz30vcjG9hbuME1GpxoLlGs= github.com/urfave/cli v1.20.0 h1:fDqGv3UG/4jbVl/QkFwEdddtEDjh/5Ov6X+0B/3bPaw= github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= @@ -120,5 +122,7 @@ gopkg.in/go-playground/assert.v1 v1.2.1 h1:xoYuJVE7KT85PYWrN730RguIQO0ePzVRfFMXa gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE= gopkg.in/go-playground/validator.v9 v9.26.0 h1:2NPPsBpD0ZoxshmLWewQru8rWmbT5JqSzz9D1ZrAjYQ= gopkg.in/go-playground/validator.v9 v9.26.0/go.mod h1:+c9/zcJMFNgbLvly1L1V+PpxWdVbfP1avr/N00E2vyQ= +gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190605142022-0a11fc526260/go.mod h1:JlmFZigtG9vBVR3QGIQ9g/Usz4BzH+Xm6Z8iHQWRYUw= diff --git a/pkg/conf/paladin/value.go b/pkg/conf/paladin/value.go index ee6dd3db2..bafb86b99 100644 --- a/pkg/conf/paladin/value.go +++ b/pkg/conf/paladin/value.go @@ -2,11 +2,13 @@ package paladin import ( "encoding" + "encoding/json" "reflect" "time" "github.com/BurntSushi/toml" "github.com/pkg/errors" + yaml "gopkg.in/yaml.v2" ) // ErrNotExist value key not exist. @@ -155,3 +157,20 @@ func (v *Value) UnmarshalTOML(dst interface{}) error { } return toml.Unmarshal([]byte(text), dst) } + +// UnmarshalJSON unmarhsal json to struct. +func (v *Value) UnmarshalJSON(dst interface{}) error { + text, err := v.Raw() + if err != nil { + return err + } + return json.Unmarshal([]byte(text), dst) +} + +func (v *Value) UnmarshalYAML(dst interface{}) error { + text, err := v.Raw() + if err != nil { + return err + } + return yaml.Unmarshal([]byte(text), dst) +}