package errors // ResponsableError is an error that has information useful in an HTTP response. // The string returned by Error should be suitable for logging useful information // to assist debugging the error. // // Status should return an appropriate HTTP status. It must not return < 100 || >= 600. // // Msg should return a message suitable to display to the end user. If the message // returned by Error is safe for the end user, it may simply call that. type ResponsableError interface { Error() string Status() int Msg() string } // SettableError is a ResponsableError which can be modified after initial creation. // // The SetStatus method can set the status, while the SetMsg method can set user message. // If any values are passed after the message, it should be passed to fmt.Sprintf for formatting. // // Methods are chainable. // // SetStatus should not use a value outside of 100-599. It may either ignore such values, or panic. type SettableError interface { ResponsableError SetStatus(int) SettableError SetMsg(string, ...any) SettableError } // UnwrappableError allows a ResponsableError to wrap another error. // It may be appropriate for Error() to delegate to the wrapped error. type UnwrappableError interface { ResponsableError Unwrap() error } // UnwrappableErrorrs allows a ResponsableError to wrap multiple errors. // It may be appropriate for Error() to either delegate to the first error, // the last error, or to concatenate the return values of all wrapped errors, // similar to errors returned by errors.Join type UnwrappableErrors interface { ResponsableError Unwrap() []error } type wrappedError interface { Error() string Unwrap() error } type wrappedErrors interface { Error() string Unwrap() []error }