mirror of
https://github.com/ceph/ceph-csi.git
synced 2024-10-19 13:49:53 +00:00
83559144b1
updated kubernetes packages to latest release. Signed-off-by: Madhu Rajanna <madhupr007@gmail.com>
66 lines
1.9 KiB
Go
66 lines
1.9 KiB
Go
package protocol
|
|
|
|
import (
|
|
"net/http"
|
|
|
|
"github.com/aws/aws-sdk-go/aws/awserr"
|
|
"github.com/aws/aws-sdk-go/aws/request"
|
|
)
|
|
|
|
// UnmarshalErrorHandler provides unmarshaling errors API response errors for
|
|
// both typed and untyped errors.
|
|
type UnmarshalErrorHandler struct {
|
|
unmarshaler ErrorUnmarshaler
|
|
}
|
|
|
|
// ErrorUnmarshaler is an abstract interface for concrete implementations to
|
|
// unmarshal protocol specific response errors.
|
|
type ErrorUnmarshaler interface {
|
|
UnmarshalError(*http.Response, ResponseMetadata) (error, error)
|
|
}
|
|
|
|
// NewUnmarshalErrorHandler returns an UnmarshalErrorHandler
|
|
// initialized for the set of exception names to the error unmarshalers
|
|
func NewUnmarshalErrorHandler(unmarshaler ErrorUnmarshaler) *UnmarshalErrorHandler {
|
|
return &UnmarshalErrorHandler{
|
|
unmarshaler: unmarshaler,
|
|
}
|
|
}
|
|
|
|
// UnmarshalErrorHandlerName is the name of the named handler.
|
|
const UnmarshalErrorHandlerName = "awssdk.protocol.UnmarshalError"
|
|
|
|
// NamedHandler returns a NamedHandler for the unmarshaler using the set of
|
|
// errors the unmarshaler was initialized for.
|
|
func (u *UnmarshalErrorHandler) NamedHandler() request.NamedHandler {
|
|
return request.NamedHandler{
|
|
Name: UnmarshalErrorHandlerName,
|
|
Fn: u.UnmarshalError,
|
|
}
|
|
}
|
|
|
|
// UnmarshalError will attempt to unmarshal the API response's error message
|
|
// into either a generic SDK error type, or a typed error corresponding to the
|
|
// errors exception name.
|
|
func (u *UnmarshalErrorHandler) UnmarshalError(r *request.Request) {
|
|
defer r.HTTPResponse.Body.Close()
|
|
|
|
respMeta := ResponseMetadata{
|
|
StatusCode: r.HTTPResponse.StatusCode,
|
|
RequestID: r.RequestID,
|
|
}
|
|
|
|
v, err := u.unmarshaler.UnmarshalError(r.HTTPResponse, respMeta)
|
|
if err != nil {
|
|
r.Error = awserr.NewRequestFailure(
|
|
awserr.New(request.ErrCodeSerialization,
|
|
"failed to unmarshal response error", err),
|
|
respMeta.StatusCode,
|
|
respMeta.RequestID,
|
|
)
|
|
return
|
|
}
|
|
|
|
r.Error = v
|
|
}
|