package pgproto3

import 
Message is the interface implemented by an object that can decode and encode a particular PostgreSQL message.
Decode is allowed and expected to retain a reference to data after returning (unlike encoding.BinaryUnmarshaler).
	Decode(data []byte) error
Encode appends itself to dst and returns the new buffer.
	Encode(dst []byte) []byte
}

type FrontendMessage interface {
	Message
	Frontend() // no-op method to distinguish frontend from backend methods
}

type BackendMessage interface {
	Message
	Backend() // no-op method to distinguish frontend from backend methods
}

type invalidMessageLenErr struct {
	messageType string
	expectedLen int
	actualLen   int
}

func ( *invalidMessageLenErr) () string {
	return fmt.Sprintf("%s body must have length of %d, but it is %d", .messageType, .expectedLen, .actualLen)
}

type invalidMessageFormatErr struct {
	messageType string
}

func ( *invalidMessageFormatErr) () string {
	return fmt.Sprintf("%s body is invalid", .messageType)