mirror of
https://github.com/hamburghammer/grcon.git
synced 2025-01-10 22:27:42 +01:00
95 lines
2.2 KiB
Go
95 lines
2.2 KiB
Go
|
package grcon
|
||
|
|
||
|
import (
|
||
|
"errors"
|
||
|
"fmt"
|
||
|
)
|
||
|
|
||
|
// Action is a type to indicate the part in which an error occurred.
|
||
|
type Action string
|
||
|
|
||
|
// Actions for error checks.
|
||
|
const (
|
||
|
// Write indicates that it happened on a write operation.
|
||
|
Write Action = "write"
|
||
|
|
||
|
// Read indicates that it happened on a read operation.
|
||
|
Read Action = "read"
|
||
|
)
|
||
|
|
||
|
// GrconError is the interface all errors from this packet implement.
|
||
|
// You can use this interface for errors.Is checks.
|
||
|
type GrconError interface {
|
||
|
// Default error interface.
|
||
|
error
|
||
|
// Action returns the action that produced the error.
|
||
|
Action() Action
|
||
|
}
|
||
|
|
||
|
func newGrconGenericError(act Action, err error) GrconGenericError {
|
||
|
return GrconGenericError{
|
||
|
Act: act,
|
||
|
Err: err,
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// GrconGenericError is a generic error that provides default implementations for the grconError interface.
|
||
|
type GrconGenericError struct {
|
||
|
Err error
|
||
|
Act Action
|
||
|
}
|
||
|
|
||
|
// Error returns the error in string format.
|
||
|
func (rge GrconGenericError) Error() string {
|
||
|
return fmt.Sprintf("grcon: on %s: %s", rge.Action(), rge.Err.Error())
|
||
|
}
|
||
|
|
||
|
// Action returns the action where the error was thrown.
|
||
|
func (rge GrconGenericError) Action() Action {
|
||
|
return rge.Act
|
||
|
}
|
||
|
|
||
|
func newUnexpectedFormatError() UnexpectedFormatError {
|
||
|
return UnexpectedFormatError{
|
||
|
newGrconGenericError(
|
||
|
Read,
|
||
|
errors.New("unexpected response format: the packet is smaller than the minimum size"),
|
||
|
),
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// UnexpectedFormatError occurres when the packet size is smaller than the minimum size.
|
||
|
type UnexpectedFormatError struct {
|
||
|
GrconGenericError
|
||
|
}
|
||
|
|
||
|
func newRequestTooLongError() RequestTooLongError {
|
||
|
return RequestTooLongError{
|
||
|
newGrconGenericError(
|
||
|
Write,
|
||
|
errors.New("request body is too long"),
|
||
|
),
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// RequestTooLongError occurres when the body of a packet is to big.
|
||
|
// Can also be an indicator that the package is malformed/corrupted.
|
||
|
type RequestTooLongError struct {
|
||
|
GrconGenericError
|
||
|
}
|
||
|
|
||
|
func newResponseTooLongError() ResponseTooLongError {
|
||
|
return ResponseTooLongError{
|
||
|
newGrconGenericError(
|
||
|
Read,
|
||
|
errors.New("response body is too long"),
|
||
|
),
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// ResponseTooLongError occurres when the size of a packet is to big.
|
||
|
// This indicates a wrongly composed/formatted packet.
|
||
|
type ResponseTooLongError struct {
|
||
|
GrconGenericError
|
||
|
}
|