63 lines
1.7 KiB
Go
63 lines
1.7 KiB
Go
|
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
|
||
|
}
|