add yaml encoder (#924)
parent
2de0fa330c
commit
e989bb04e3
@ -0,0 +1,10 @@ |
||||
package file |
||||
|
||||
import "strings" |
||||
|
||||
func format(name string) string { |
||||
if p := strings.Split(name, "."); len(p) > 1 { |
||||
return p[len(p)-1] |
||||
} |
||||
return "" |
||||
} |
@ -0,0 +1,37 @@ |
||||
package yaml |
||||
|
||||
import ( |
||||
"reflect" |
||||
|
||||
"github.com/go-kratos/kratos/v2/encoding" |
||||
"gopkg.in/yaml.v2" |
||||
) |
||||
|
||||
// Name is the name registered for the json codec.
|
||||
const Name = "yaml" |
||||
|
||||
func init() { |
||||
encoding.RegisterCodec(codec{}) |
||||
} |
||||
|
||||
// codec is a Codec implementation with json.
|
||||
type codec struct{} |
||||
|
||||
func (codec) Marshal(v interface{}) ([]byte, error) { |
||||
return yaml.Marshal(v) |
||||
} |
||||
|
||||
func (codec) Unmarshal(data []byte, v interface{}) error { |
||||
rv := reflect.ValueOf(v) |
||||
for rv.Kind() == reflect.Ptr { |
||||
if rv.IsNil() { |
||||
rv.Set(reflect.New(rv.Type().Elem())) |
||||
} |
||||
rv = rv.Elem() |
||||
} |
||||
return yaml.Unmarshal(data, v) |
||||
} |
||||
|
||||
func (codec) Name() string { |
||||
return Name |
||||
} |
Loading…
Reference in new issue