oss/errors.go (138 lines of code) (raw):

package oss import ( "encoding/xml" "fmt" "net/http" "strings" "time" ) type ServiceError struct { XMLName xml.Name `xml:"Error"` Code string `xml:"Code"` Message string `xml:"Message"` RequestID string `xml:"RequestId"` EC string `xml:"EC"` StatusCode int Snapshot []byte Timestamp time.Time RequestTarget string Headers http.Header } func (e *ServiceError) Error() string { return fmt.Sprintf( `Error returned by Service. Http Status Code: %d. Error Code: %s. Request Id: %s. Message: %s. EC: %s. Timestamp: %s. Request Endpoint: %s.`, e.StatusCode, e.Code, e.RequestID, e.Message, e.EC, e.Timestamp, e.RequestTarget) } func (e *ServiceError) HttpStatusCode() int { return e.StatusCode } func (e *ServiceError) ErrorCode() string { return e.Code } type ClientError struct { Code string Message string Err error } func (e *ClientError) Unwrap() error { return e.Err } func (e *ClientError) Error() string { return fmt.Sprintf("client error: %v, %v", e.Message, e.Err) } type OperationError struct { name string err error } func (e *OperationError) Operation() string { return e.name } func (e *OperationError) Unwrap() error { return e.err } func (e *OperationError) Error() string { return fmt.Sprintf("operation error %s: %v", e.name, e.err) } type DeserializationError struct { Err error Snapshot []byte } func (e *DeserializationError) Error() string { const msg = "deserialization failed" if e.Err == nil { return msg } return fmt.Sprintf("%s, %v", msg, e.Err) } func (e *DeserializationError) Unwrap() error { return e.Err } type SerializationError struct { Err error } func (e *SerializationError) Error() string { const msg = "serialization failed" if e.Err == nil { return msg } return fmt.Sprintf("%s: %v", msg, e.Err) } func (e *SerializationError) Unwrap() error { return e.Err } type CanceledError struct { Err error } func (*CanceledError) CanceledError() bool { return true } func (e *CanceledError) Unwrap() error { return e.Err } func (e *CanceledError) Error() string { return fmt.Sprintf("canceled, %v", e.Err) } type InvalidParamError interface { error Field() string SetContext(string) } type invalidParamError struct { context string field string reason string } func (e invalidParamError) Error() string { return fmt.Sprintf("%s, %s.", e.reason, e.Field()) } func (e invalidParamError) Field() string { sb := &strings.Builder{} sb.WriteString(e.context) if sb.Len() > 0 { sb.WriteRune('.') } sb.WriteString(e.field) return sb.String() } func (e *invalidParamError) SetContext(ctx string) { e.context = ctx } func NewErrParamRequired(field string) InvalidParamError { return &invalidParamError{ field: field, reason: fmt.Sprintf("missing required field"), } } func NewErrParamInvalid(field string) InvalidParamError { return &invalidParamError{ field: field, reason: fmt.Sprintf("invalid field"), } } func NewErrParamNull(field string) InvalidParamError { return &invalidParamError{ field: field, reason: fmt.Sprintf("null field"), } } func NewErrParamTypeNotSupport(field string) InvalidParamError { return &invalidParamError{ field: field, reason: fmt.Sprintf("type not support"), } }