package bytes

import (
	"errors"
)

type Marshaler struct{}

type Message struct {
	Header map[string]string
	Body   []byte
}

func (n Marshaler) Marshal(v interface{}) ([]byte, error) {
	switch v.(type) {
	case *[]byte:
		ve := v.(*[]byte)
		return *ve, nil
	case []byte:
		return v.([]byte), nil
	case *Message:
		return v.(*Message).Body, nil
	}
	return nil, errors.New("invalid message")
}

func (n Marshaler) Unmarshal(d []byte, v interface{}) error {
	switch v.(type) {
	case *[]byte:
		ve := v.(*[]byte)
		*ve = d
	case *Message:
		ve := v.(*Message)
		ve.Body = d
	}
	return errors.New("invalid message")
}

func (n Marshaler) String() string {
	return "bytes"
}