github.com/aavshr/aws-sdk-go@v1.41.3/private/protocol/restxml/restxml.go (about) 1 // Package restxml provides RESTful XML serialization of AWS 2 // requests and responses. 3 package restxml 4 5 //go:generate go run -tags codegen ../../../private/model/cli/gen-protocol-tests ../../../models/protocol_tests/input/rest-xml.json build_test.go 6 //go:generate go run -tags codegen ../../../private/model/cli/gen-protocol-tests ../../../models/protocol_tests/output/rest-xml.json unmarshal_test.go 7 8 import ( 9 "bytes" 10 "encoding/xml" 11 12 "github.com/aavshr/aws-sdk-go/aws/awserr" 13 "github.com/aavshr/aws-sdk-go/aws/request" 14 "github.com/aavshr/aws-sdk-go/private/protocol/query" 15 "github.com/aavshr/aws-sdk-go/private/protocol/rest" 16 "github.com/aavshr/aws-sdk-go/private/protocol/xml/xmlutil" 17 ) 18 19 // BuildHandler is a named request handler for building restxml protocol requests 20 var BuildHandler = request.NamedHandler{Name: "awssdk.restxml.Build", Fn: Build} 21 22 // UnmarshalHandler is a named request handler for unmarshaling restxml protocol requests 23 var UnmarshalHandler = request.NamedHandler{Name: "awssdk.restxml.Unmarshal", Fn: Unmarshal} 24 25 // UnmarshalMetaHandler is a named request handler for unmarshaling restxml protocol request metadata 26 var UnmarshalMetaHandler = request.NamedHandler{Name: "awssdk.restxml.UnmarshalMeta", Fn: UnmarshalMeta} 27 28 // UnmarshalErrorHandler is a named request handler for unmarshaling restxml protocol request errors 29 var UnmarshalErrorHandler = request.NamedHandler{Name: "awssdk.restxml.UnmarshalError", Fn: UnmarshalError} 30 31 // Build builds a request payload for the REST XML protocol. 32 func Build(r *request.Request) { 33 rest.Build(r) 34 35 if t := rest.PayloadType(r.Params); t == "structure" || t == "" { 36 var buf bytes.Buffer 37 err := xmlutil.BuildXML(r.Params, xml.NewEncoder(&buf)) 38 if err != nil { 39 r.Error = awserr.NewRequestFailure( 40 awserr.New(request.ErrCodeSerialization, 41 "failed to encode rest XML request", err), 42 0, 43 r.RequestID, 44 ) 45 return 46 } 47 r.SetBufferBody(buf.Bytes()) 48 } 49 } 50 51 // Unmarshal unmarshals a payload response for the REST XML protocol. 52 func Unmarshal(r *request.Request) { 53 if t := rest.PayloadType(r.Data); t == "structure" || t == "" { 54 defer r.HTTPResponse.Body.Close() 55 decoder := xml.NewDecoder(r.HTTPResponse.Body) 56 err := xmlutil.UnmarshalXML(r.Data, decoder, "") 57 if err != nil { 58 r.Error = awserr.NewRequestFailure( 59 awserr.New(request.ErrCodeSerialization, 60 "failed to decode REST XML response", err), 61 r.HTTPResponse.StatusCode, 62 r.RequestID, 63 ) 64 return 65 } 66 } else { 67 rest.Unmarshal(r) 68 } 69 } 70 71 // UnmarshalMeta unmarshals response headers for the REST XML protocol. 72 func UnmarshalMeta(r *request.Request) { 73 rest.UnmarshalMeta(r) 74 } 75 76 // UnmarshalError unmarshals a response error for the REST XML protocol. 77 func UnmarshalError(r *request.Request) { 78 query.UnmarshalError(r) 79 }