35 lines
961 B
Go
35 lines
961 B
Go
package gitea
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
)
|
|
|
|
var (
|
|
ErrPermissionDenied = errors.New("permission denied")
|
|
ErrNotFound = errors.New("not found")
|
|
ErrConflict = errors.New("conflict")
|
|
ErrValidation = errors.New("validation failed")
|
|
ErrUpstream = errors.New("upstream gitea error")
|
|
)
|
|
|
|
// MapStatus returns nil for 2xx, otherwise a typed error wrapping the response body.
|
|
func MapStatus(status int, body []byte) error {
|
|
if status >= 200 && status < 300 {
|
|
return nil
|
|
}
|
|
switch {
|
|
case status == 401, status == 403:
|
|
return fmt.Errorf("%w: %s", ErrPermissionDenied, body)
|
|
case status == 404:
|
|
return fmt.Errorf("%w: %s", ErrNotFound, body)
|
|
case status == 409:
|
|
return fmt.Errorf("%w: %s", ErrConflict, body)
|
|
case status == 422:
|
|
return fmt.Errorf("%w: %s", ErrValidation, body)
|
|
case status >= 500:
|
|
return fmt.Errorf("%w (status %d)", ErrUpstream, status)
|
|
}
|
|
return fmt.Errorf("unexpected status %d: %s", status, body)
|
|
}
|