58 lines
1.5 KiB
Go
58 lines
1.5 KiB
Go
package errs
|
|
|
|
import (
|
|
"fmt"
|
|
"net/http"
|
|
)
|
|
|
|
type Error struct {
|
|
Code int
|
|
Msg string
|
|
}
|
|
|
|
func (e *Error) Error() string {
|
|
return fmt.Sprintf("[%d] %s", e.Code, e.Msg)
|
|
}
|
|
|
|
var (
|
|
ErrUnexpected = Internal.WithMsg("Unexpected internal error.")
|
|
ErrNotFound = NotFound.WithMsg("Not found.")
|
|
ErrAlreadyExists = Conflict.WithMsg("Already exists.")
|
|
|
|
// Validation errors.
|
|
ErrInvalidIP = BadRequest.WithMsg("Invalid IP.")
|
|
ErrInvalidPeerIP = BadRequest.WithMsg("Invalid peer IP.")
|
|
ErrNonPrivateIP = BadRequest.WithMsg("Non-private IP.")
|
|
ErrInvalidPort = BadRequest.WithMsg("Invalid port.")
|
|
ErrInvalidNetName = BadRequest.WithMsg("Invalid network name.")
|
|
ErrNetNameNotLocal = BadRequest.WithMsg("Network name must end with .local.")
|
|
ErrInvalidPeerName = BadRequest.WithMsg("Invalid peer name.")
|
|
)
|
|
|
|
// ----------------------------------------------------------------------------
|
|
|
|
type Type struct {
|
|
Code int
|
|
Msg string
|
|
}
|
|
|
|
func (t Type) WithErr(err error) *Error {
|
|
return &Error{Code: t.Code, Msg: err.Error()}
|
|
}
|
|
|
|
func (t Type) WithMsg(msg string) *Error {
|
|
return &Error{Code: t.Code, Msg: msg}
|
|
}
|
|
|
|
func (t Type) WithMsgf(msg string, args ...any) *Error {
|
|
return &Error{Code: t.Code, Msg: fmt.Sprintf(msg, args...)}
|
|
}
|
|
|
|
var (
|
|
Internal = Type{Code: http.StatusInternalServerError}
|
|
NotAuthorized = Type{Code: http.StatusUnauthorized}
|
|
NotFound = Type{Code: http.StatusNotFound}
|
|
BadRequest = Type{Code: http.StatusBadRequest}
|
|
Conflict = Type{Code: http.StatusConflict}
|
|
)
|