package codec

// Frame gives us the ability to define raw data to send over the pipes
type Frame struct {
	Data []byte
}

// NewFrame returns new frame with data
func NewFrame(data []byte) *Frame {
	return &Frame{Data: data}
}

// MarshalJSON returns frame data
func (m *Frame) MarshalJSON() ([]byte, error) {
	return m.Marshal()
}

// UnmarshalJSON set frame data
func (m *Frame) UnmarshalJSON(data []byte) error {
	return m.Unmarshal(data)
}

// ProtoMessage noop func
func (m *Frame) ProtoMessage() {}

// Reset resets frame
func (m *Frame) Reset() {
	*m = Frame{}
}

// String returns frame as string
func (m *Frame) String() string {
	return string(m.Data)
}

// Marshal returns frame data
func (m *Frame) Marshal() ([]byte, error) {
	return m.Data, nil
}

// Unmarshal set frame data
func (m *Frame) Unmarshal(data []byte) error {
	m.Data = data
	return nil
}