1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- package codec
-
- import (
- "fmt"
- )
-
- type StringCoder struct{}
-
- func (c *StringCoder) Encoder(data interface{}) ([]byte, error) {
- switch t := data.(type) {
- case string:
- return []byte(t), nil
- case *string:
- return []byte(*t), nil
- case []byte:
- return t, nil
- case *[]byte:
- return *t, nil
- default:
- return nil, fmt.Errorf("%T can not be directly converted to []byte", t)
- }
- }
-
- func (c *StringCoder) Decoder(data []byte, v interface{}) error {
- switch t := v.(type) {
- case string:
- return fmt.Errorf("expect %T but %T", &t, t)
- case *string:
- *t = string(data)
- case []byte:
- return fmt.Errorf("expect %T but %T", &t, t)
- case *[]byte:
- *t = data
- default:
- return fmt.Errorf("[]byte can not be directly converted to %T", t)
- }
-
- return nil
- }
-
- func init() {
- Register(String, &StringCoder{})
- }
|