diff --git a/codec.go b/codec.go index 4b224a7..ff37769 100644 --- a/codec.go +++ b/codec.go @@ -69,15 +69,21 @@ func (w wrapCodec) Unmarshal(data []byte, v interface{}) error { } func (protoCodec) Marshal(v interface{}) ([]byte, error) { - b, ok := v.(*bytes.Frame) - if ok { - return b.Data, nil + switch m := v.(type) { + case *bytes.Frame: + return m.Data, nil + case proto.Message: + return proto.Marshal(m) } - return proto.Marshal(v.(proto.Message)) + return nil, fmt.Errorf("failed to marshal: %v is not type of *bytes.Frame or proto.Message", v) } func (protoCodec) Unmarshal(data []byte, v interface{}) error { - return proto.Unmarshal(data, v.(proto.Message)) + m, ok := v.(proto.Message) + if !ok { + return fmt.Errorf("failed to unmarshal: %v is not type of proto.Message", v) + } + return proto.Unmarshal(data, m) } func (protoCodec) Name() string {