watchtower/wtwire/error: add generic error message

This commit is contained in:
Conner Fromknecht 2018-10-23 18:28:22 -07:00
parent d171df5184
commit 999466c860
No known key found for this signature in database
GPG Key ID: E7D737B67FA592C7

@ -0,0 +1,62 @@
package wtwire
import "io"
// Error is a generic error message that can be sent to a client if a request
// fails outside of prescribed protocol errors. Typically this would be followed
// by the server disconnecting the client, and so can be useful to transfering
// the exact reason.
type Error struct {
// Code specifies the error code encountered by the server.
Code ErrorCode
// Data encodes a payload whose contents can be interpreted by the
// client in response to the error code.
Data []byte
}
// NewError returns an freshly-initialized Error message.
func NewError() *Error {
return &Error{}
}
// A compile time check to ensure Error implements the wtwire.Message interface.
var _ Message = (*Error)(nil)
// Decode deserializes a serialized Error message stored in the passed io.Reader
// observing the specified protocol version.
//
// This is part of the wtwire.Message interface.
func (e *Error) Decode(r io.Reader, pver uint32) error {
return ReadElements(r,
&e.Code,
&e.Data,
)
}
// Encode serializes the target Error into the passed io.Writer observing the
// protocol version specified.
//
// This is part of the wtwire.Message interface.
func (e *Error) Encode(w io.Writer, prver uint32) error {
return WriteElements(w,
e.Code,
e.Data,
)
}
// MsgType returns the integer uniquely identifying this message type on the
// wire.
//
// This is part of the wtwire.Message interface.
func (e *Error) MsgType() MessageType {
return MsgError
}
// MaxPayloadLength returns the maximum allowed payload size for a Error
// complete message observing the specified protocol version.
//
// This is part of the wtwire.Message interface.
func (e *Error) MaxPayloadLength(uint32) uint32 {
return MaxMessagePayload
}