fix(smalltrip,problems): make problems be structs with Problem embedded

This commit is contained in:
Guz
2025-07-29 19:15:10 -03:00
parent 6ed38cf1cf
commit 61d9bee554
2 changed files with 63 additions and 63 deletions

View File

@@ -8,10 +8,10 @@ import (
) )
func NewBadRequest(detail string, opts ...Option) BadRequest { func NewBadRequest(detail string, opts ...Option) BadRequest {
return BadRequest(NewDetailed(http.StatusBadRequest, detail, opts...)) return BadRequest{NewDetailed(http.StatusBadRequest, detail, opts...)}
} }
type BadRequest Problem type BadRequest struct{ Problem }
func NewUnauthorized(scheme AuthScheme, opts ...Option) Unauthorized { func NewUnauthorized(scheme AuthScheme, opts ...Option) Unauthorized {
return Unauthorized{ return Unauthorized{
@@ -37,22 +37,22 @@ func (p Unauthorized) ServeHTTP(w http.ResponseWriter, r *http.Request) {
} }
func NewPaymentRequired(opts ...Option) PaymentRequired { func NewPaymentRequired(opts ...Option) PaymentRequired {
return PaymentRequired(NewStatus(http.StatusPaymentRequired, opts...)) return PaymentRequired{NewStatus(http.StatusPaymentRequired, opts...)}
} }
type PaymentRequired Problem type PaymentRequired struct{ Problem }
func NewForbidden(opts ...Option) Forbidden { func NewForbidden(opts ...Option) Forbidden {
return Forbidden(NewStatus(http.StatusForbidden, opts...)) return Forbidden{NewStatus(http.StatusForbidden, opts...)}
} }
type Forbidden Problem type Forbidden struct{ Problem }
func NewNotFound(opts ...Option) NotFound { func NewNotFound(opts ...Option) NotFound {
return NotFound(NewStatus(http.StatusNotFound, opts...)) return NotFound{NewStatus(http.StatusNotFound, opts...)}
} }
type NotFound Problem type NotFound struct{ Problem }
func NewMethodNotAllowed[T string | []string](allow T, opts ...Option) MethodNotAllowed { func NewMethodNotAllowed[T string | []string](allow T, opts ...Option) MethodNotAllowed {
p := MethodNotAllowed{ p := MethodNotAllowed{
@@ -151,10 +151,10 @@ type AuthScheme struct {
} }
func NewRequestTimeout(opts ...Option) RequestTimeout { func NewRequestTimeout(opts ...Option) RequestTimeout {
return RequestTimeout(NewStatus(http.StatusRequestTimeout, opts...)) return RequestTimeout{NewStatus(http.StatusRequestTimeout, opts...)}
} }
type RequestTimeout Problem type RequestTimeout struct{ Problem }
func (p RequestTimeout) ServeHTTP(w http.ResponseWriter, r *http.Request) { func (p RequestTimeout) ServeHTTP(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Connection", "close") w.Header().Set("Connection", "close")
@@ -162,46 +162,46 @@ func (p RequestTimeout) ServeHTTP(w http.ResponseWriter, r *http.Request) {
} }
func NewConflict(opts ...Option) Conflict { func NewConflict(opts ...Option) Conflict {
return Conflict(NewStatus(http.StatusConflict, opts...)) return Conflict{NewStatus(http.StatusConflict, opts...)}
} }
type Conflict Problem type Conflict struct{ Problem }
func NewGone(opts ...Option) Gone { func NewGone(opts ...Option) Gone {
return Gone(NewStatus(http.StatusGone, opts...)) return Gone{NewStatus(http.StatusGone, opts...)}
} }
type Gone Problem type Gone struct{ Problem }
func NewLengthRequired(opts ...Option) LengthRequired { func NewLengthRequired(opts ...Option) LengthRequired {
return LengthRequired(NewStatus(http.StatusLengthRequired, opts...)) return LengthRequired{NewStatus(http.StatusLengthRequired, opts...)}
} }
type LengthRequired Problem type LengthRequired struct{ Problem }
func NewPreconditionFailed(opts ...Option) PreconditionFailed { func NewPreconditionFailed(opts ...Option) PreconditionFailed {
return PreconditionFailed(NewStatus(http.StatusPreconditionFailed, opts...)) return PreconditionFailed{NewStatus(http.StatusPreconditionFailed, opts...)}
} }
type PreconditionFailed Problem type PreconditionFailed struct{ Problem }
func NewContentTooLarge(opts ...Option) ContentTooLarge { func NewContentTooLarge(opts ...Option) ContentTooLarge {
return ContentTooLarge(NewStatus(http.StatusRequestEntityTooLarge, opts...)) return ContentTooLarge{NewStatus(http.StatusRequestEntityTooLarge, opts...)}
} }
type ContentTooLarge Problem type ContentTooLarge struct{ Problem }
func NewURITooLong(opts ...Option) URITooLong { func NewURITooLong(opts ...Option) URITooLong {
return URITooLong(NewStatus(http.StatusRequestURITooLong, opts...)) return URITooLong{NewStatus(http.StatusRequestURITooLong, opts...)}
} }
type URITooLong Problem type URITooLong struct{ Problem }
func NewUnsupportedMediaType(opts ...Option) UnsupportedMediaType { func NewUnsupportedMediaType(opts ...Option) UnsupportedMediaType {
return UnsupportedMediaType(NewStatus(http.StatusUnsupportedMediaType, opts...)) return UnsupportedMediaType{NewStatus(http.StatusUnsupportedMediaType, opts...)}
} }
type UnsupportedMediaType Problem type UnsupportedMediaType struct{ Problem }
func NewRangeNotSatisfiable(unit string, contentRange int, opts ...Option) RangeNotSatisfiable { func NewRangeNotSatisfiable(unit string, contentRange int, opts ...Option) RangeNotSatisfiable {
return RangeNotSatisfiable{ return RangeNotSatisfiable{
@@ -221,47 +221,47 @@ func (p RangeNotSatisfiable) ServeHTTP(w http.ResponseWriter, r *http.Request) {
} }
func NewExpectationFailed(opts ...Option) ExpectationFailed { func NewExpectationFailed(opts ...Option) ExpectationFailed {
return ExpectationFailed(NewStatus(http.StatusExpectationFailed, opts...)) return ExpectationFailed{NewStatus(http.StatusExpectationFailed, opts...)}
} }
type ExpectationFailed Problem type ExpectationFailed struct{ Problem }
func NewTeapot(opts ...Option) Teapot { func NewTeapot(opts ...Option) Teapot {
return Teapot(NewStatus(http.StatusTeapot, opts...)) return Teapot{NewStatus(http.StatusTeapot, opts...)}
} }
type Teapot Problem type Teapot struct{ Problem }
func NewMisdirectedRequest(opts ...Option) MisdirectedRequest { func NewMisdirectedRequest(opts ...Option) MisdirectedRequest {
return MisdirectedRequest(NewStatus(http.StatusMisdirectedRequest, opts...)) return MisdirectedRequest{NewStatus(http.StatusMisdirectedRequest, opts...)}
} }
type MisdirectedRequest Problem type MisdirectedRequest struct{ Problem }
func NewUnprocessableContent(opts ...Option) UnprocessableContent { func NewUnprocessableContent(opts ...Option) UnprocessableContent {
return UnprocessableContent(NewStatus(http.StatusUnprocessableEntity, opts...)) return UnprocessableContent{NewStatus(http.StatusUnprocessableEntity, opts...)}
} }
type UnprocessableContent Problem type UnprocessableContent struct{ Problem }
// TODO?: Should the response of this be different and follow WebDAV's XML format? // TODO?: Should the response of this be different and follow WebDAV's XML format?
func NewLocked(opts ...Option) Locked { func NewLocked(opts ...Option) Locked {
return Locked(NewStatus(http.StatusLocked, opts...)) return Locked{NewStatus(http.StatusLocked, opts...)}
} }
type Locked Problem type Locked struct{ Problem }
func NewFailedDependency(opts ...Option) FailedDependency { func NewFailedDependency(opts ...Option) FailedDependency {
return FailedDependency(NewStatus(http.StatusFailedDependency, opts...)) return FailedDependency{NewStatus(http.StatusFailedDependency, opts...)}
} }
type FailedDependency Problem type FailedDependency struct{ Problem }
func NewTooEarly(opts ...Option) TooEarly { func NewTooEarly(opts ...Option) TooEarly {
return TooEarly(NewStatus(http.StatusTooEarly, opts...)) return TooEarly{NewStatus(http.StatusTooEarly, opts...)}
} }
type TooEarly Problem type TooEarly struct{ Problem }
func NewUpgradeRequired(protocol Protocol, opts ...Option) UpgradeRequired { func NewUpgradeRequired(protocol Protocol, opts ...Option) UpgradeRequired {
return UpgradeRequired{ return UpgradeRequired{
@@ -289,14 +289,14 @@ const (
type Protocol string type Protocol string
func NewPreconditionRequired(opts ...Option) PreconditionRequired { func NewPreconditionRequired(opts ...Option) PreconditionRequired {
return PreconditionRequired(NewStatus(http.StatusPreconditionRequired, opts...)) return PreconditionRequired{NewStatus(http.StatusPreconditionRequired, opts...)}
} }
type PreconditionRequired Problem type PreconditionRequired struct{ Problem }
func NewTooManyRequests[T time.Time | time.Duration](retryAfter T, opts ...Option) TooManyRequests[T] { func NewTooManyRequests[T time.Time | time.Duration](retryAfter T, opts ...Option) TooManyRequests[T] {
p := NewStatus(http.StatusTooManyRequests, opts...) p := NewStatus(http.StatusTooManyRequests, opts...)
return TooManyRequests[T]{Problem: p, RetryAfter: retryAfter} return TooManyRequests[T]{Problem: p, RetryAfter: RetryAfter[T]{time: retryAfter}}
} }
type TooManyRequests[T time.Time | time.Duration] struct { type TooManyRequests[T time.Time | time.Duration] struct {
@@ -310,13 +310,13 @@ func (p TooManyRequests[T]) ServeHTTP(w http.ResponseWriter, r *http.Request) {
} }
func NewRequestHeaderFieldsTooLarge(opts ...Option) RequestHeaderFieldsTooLarge { func NewRequestHeaderFieldsTooLarge(opts ...Option) RequestHeaderFieldsTooLarge {
return RequestHeaderFieldsTooLarge(NewStatus(http.StatusRequestHeaderFieldsTooLarge, opts...)) return RequestHeaderFieldsTooLarge{NewStatus(http.StatusRequestHeaderFieldsTooLarge, opts...)}
} }
type RequestHeaderFieldsTooLarge Problem type RequestHeaderFieldsTooLarge struct{ Problem }
func NewUnavailableForLegalReasons(opts ...Option) UnavailableForLegalReasons { func NewUnavailableForLegalReasons(opts ...Option) UnavailableForLegalReasons {
return UnavailableForLegalReasons(NewStatus(http.StatusUnavailableForLegalReasons, opts...)) return UnavailableForLegalReasons{NewStatus(http.StatusUnavailableForLegalReasons, opts...)}
} }
type UnavailableForLegalReasons Problem type UnavailableForLegalReasons struct{ Problem }

View File

@@ -60,7 +60,7 @@ func (i ErrorTree) Error() string {
func NewNotImplemented[T time.Time | time.Duration](retryAfter T, opts ...Option) NotImplemented[T] { func NewNotImplemented[T time.Time | time.Duration](retryAfter T, opts ...Option) NotImplemented[T] {
p := NewStatus(http.StatusNotImplemented, opts...) p := NewStatus(http.StatusNotImplemented, opts...)
return NotImplemented[T]{Problem: p, RetryAfter: retryAfter} return NotImplemented[T]{Problem: p, RetryAfter: RetryAfter[T]{time: retryAfter}}
} }
type NotImplemented[T time.Time | time.Duration] struct { type NotImplemented[T time.Time | time.Duration] struct {
@@ -74,14 +74,14 @@ func (p NotImplemented[T]) ServeHTTP(w http.ResponseWriter, r *http.Request) {
} }
func NewBadGateway(opts ...Option) BadGateway { func NewBadGateway(opts ...Option) BadGateway {
return BadGateway(NewStatus(http.StatusBadGateway, opts...)) return BadGateway{NewStatus(http.StatusBadGateway, opts...)}
} }
type BadGateway Problem type BadGateway struct{ Problem }
func NewServiceUnavailable[T time.Time | time.Duration](retryAfter T, opts ...Option) ServiceUnavailable[T] { func NewServiceUnavailable[T time.Time | time.Duration](retryAfter T, opts ...Option) ServiceUnavailable[T] {
p := NewStatus(http.StatusNotImplemented, opts...) p := NewStatus(http.StatusNotImplemented, opts...)
return ServiceUnavailable[T]{Problem: p, RetryAfter: retryAfter} return ServiceUnavailable[T]{Problem: p, RetryAfter: RetryAfter[T]{time: retryAfter}}
} }
type ServiceUnavailable[T time.Time | time.Duration] struct { type ServiceUnavailable[T time.Time | time.Duration] struct {
@@ -95,43 +95,43 @@ func (p ServiceUnavailable[T]) ServeHTTP(w http.ResponseWriter, r *http.Request)
} }
func NewGatewayTimeout(opts ...Option) GatewayTimeout { func NewGatewayTimeout(opts ...Option) GatewayTimeout {
return GatewayTimeout(NewStatus(http.StatusGatewayTimeout, opts...)) return GatewayTimeout{NewStatus(http.StatusGatewayTimeout, opts...)}
} }
type GatewayTimeout Problem type GatewayTimeout struct{ Problem }
func NewHTTPVersionNotSupported(opts ...Option) HTTPVersionNotSupported { func NewHTTPVersionNotSupported(opts ...Option) HTTPVersionNotSupported {
return HTTPVersionNotSupported(NewStatus(http.StatusHTTPVersionNotSupported, opts...)) return HTTPVersionNotSupported{NewStatus(http.StatusHTTPVersionNotSupported, opts...)}
} }
type HTTPVersionNotSupported Problem type HTTPVersionNotSupported struct{ Problem }
func NewVariantAlsoNegotiates(opts ...Option) VariantAlsoNegotiates { func NewVariantAlsoNegotiates(opts ...Option) VariantAlsoNegotiates {
return VariantAlsoNegotiates(NewStatus(http.StatusVariantAlsoNegotiates, opts...)) return VariantAlsoNegotiates{NewStatus(http.StatusVariantAlsoNegotiates, opts...)}
} }
type VariantAlsoNegotiates Problem type VariantAlsoNegotiates struct{ Problem }
func NewInsufficientStorage(opts ...Option) InsufficientStorage { func NewInsufficientStorage(opts ...Option) InsufficientStorage {
return InsufficientStorage(NewStatus(http.StatusInsufficientStorage, opts...)) return InsufficientStorage{NewStatus(http.StatusInsufficientStorage, opts...)}
} }
type InsufficientStorage Problem type InsufficientStorage struct{ Problem }
func NewLoopDetected(opts ...Option) LoopDetected { func NewLoopDetected(opts ...Option) LoopDetected {
return LoopDetected(NewStatus(http.StatusLoopDetected, opts...)) return LoopDetected{NewStatus(http.StatusLoopDetected, opts...)}
} }
type LoopDetected Problem type LoopDetected struct{ Problem }
func NewNotExtended(opts ...Option) NotExtended { func NewNotExtended(opts ...Option) NotExtended {
return NotExtended(NewStatus(http.StatusNotExtended, opts...)) return NotExtended{NewStatus(http.StatusNotExtended, opts...)}
} }
type NotExtended Problem type NotExtended struct{ Problem }
func NewNetworkAuthenticationRequired(opts ...Option) NetworkAuthenticationRequired { func NewNetworkAuthenticationRequired(opts ...Option) NetworkAuthenticationRequired {
return NetworkAuthenticationRequired(NewStatus(http.StatusNetworkAuthenticationRequired, opts...)) return NetworkAuthenticationRequired{NewStatus(http.StatusNetworkAuthenticationRequired, opts...)}
} }
type NetworkAuthenticationRequired Problem type NetworkAuthenticationRequired struct{ Problem }