encoding/xml: add xml encode support (#905)
* encoding/xml: add xml encode support * encoding/xml: avoid nil pointer panic * action: avoid go get golint pollution go.modpull/906/head
parent
eb732c4de0
commit
7e7bbdbed6
@ -0,0 +1,37 @@ |
||||
package xml |
||||
|
||||
import ( |
||||
"encoding/xml" |
||||
"reflect" |
||||
|
||||
"github.com/go-kratos/kratos/v2/encoding" |
||||
) |
||||
|
||||
// Name is the name registered for the xml codec.
|
||||
const Name = "xml" |
||||
|
||||
func init() { |
||||
encoding.RegisterCodec(codec{}) |
||||
} |
||||
|
||||
// codec is a Codec implementation with xml.
|
||||
type codec struct{} |
||||
|
||||
func (codec) Marshal(v interface{}) ([]byte, error) { |
||||
return xml.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 xml.Unmarshal(data, v) |
||||
} |
||||
|
||||
func (codec) Name() string { |
||||
return Name |
||||
} |
Loading…
Reference in new issue