64 lines
1.2 KiB
Go
64 lines
1.2 KiB
Go
|
package server
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"net/http"
|
||
|
"strings"
|
||
|
)
|
||
|
|
||
|
type Error uint32
|
||
|
|
||
|
const (
|
||
|
Ok Error = http.StatusOK
|
||
|
ErrorNotImplemented Error = http.StatusNotImplemented
|
||
|
ErrorMethodNotAllowed Error = http.StatusMethodNotAllowed
|
||
|
ErrorBadRequest Error = http.StatusBadRequest
|
||
|
ErrorUnauthorized Error = http.StatusUnauthorized
|
||
|
ErrorServerError Error = http.StatusInternalServerError
|
||
|
)
|
||
|
|
||
|
func (e Error) Ok() (ok bool) {
|
||
|
return e == Ok
|
||
|
}
|
||
|
|
||
|
func (e Error) HttpStatus() (code int) {
|
||
|
return int(e)
|
||
|
}
|
||
|
|
||
|
func (e Error) String() (out string) {
|
||
|
switch e {
|
||
|
case Ok:
|
||
|
out = "ok"
|
||
|
case ErrorNotImplemented:
|
||
|
out = "server not implemented"
|
||
|
case ErrorMethodNotAllowed:
|
||
|
out = "method not allowed"
|
||
|
case ErrorBadRequest:
|
||
|
out = "bad request"
|
||
|
case ErrorUnauthorized:
|
||
|
out = "user unauthorized"
|
||
|
case ErrorServerError:
|
||
|
out = "internal server error"
|
||
|
default:
|
||
|
out = "unhandled error"
|
||
|
}
|
||
|
return
|
||
|
}
|
||
|
|
||
|
func (e Error) Error() (out string) {
|
||
|
return fmt.Sprintf("%s (%d)", e.String(), e.HttpStatus())
|
||
|
}
|
||
|
|
||
|
func (e Error) Bytes() (body []byte) {
|
||
|
var msg string
|
||
|
switch e {
|
||
|
default:
|
||
|
msg = strings.Join(strings.Split(e.String(), " "), "_")
|
||
|
}
|
||
|
return mustMarshalJson(struct {
|
||
|
Error string `json:"error"`
|
||
|
}{
|
||
|
Error: msg,
|
||
|
})
|
||
|
}
|