package common import ( "errors" "github.com/matchsystems/werr" "net/http" ) var ( ErrNotImplemented = errors.New("not implemented yet") ErrCanceled = errors.New("canceled") ErrDeadlineExceeded = errors.New("deadline exceeded") ErrRemoteServiceFailed = errors.New("remote service failed") ErrInvalidAction = errors.New("invalid action") ErrInvalidArgument = errors.New("invalid argument") ErrOutOfRange = errors.New("out of range") ErrPermissionDenied = errors.New("permission denied") ErrUnauthenticated = errors.New("unauthenticated") ErrEntityExists = errors.New("entity already exists") ErrEntityNotFound = errors.New("entity not found") ErrEntityOutdated = errors.New("entity outdated") ) func GetHttpCode(err error) int { err = werr.UnwrapAll(err) switch { case errors.Is(err, ErrNotImplemented): return http.StatusNotImplemented case errors.Is(err, ErrCanceled), errors.Is(err, ErrDeadlineExceeded): return http.StatusRequestTimeout case errors.Is(err, ErrRemoteServiceFailed): return http.StatusServiceUnavailable case errors.Is(err, ErrInvalidAction), errors.Is(err, ErrInvalidArgument), errors.Is(err, ErrOutOfRange): return http.StatusBadRequest case errors.Is(err, ErrPermissionDenied): return http.StatusForbidden case errors.Is(err, ErrUnauthenticated): return http.StatusUnauthorized case errors.Is(err, ErrEntityExists): return http.StatusConflict case errors.Is(err, ErrEntityNotFound): return http.StatusNotFound default: return http.StatusInternalServerError } }