code.dwrz.net

Go monorepo.
Log | Files | Refs

error_utils.go (1675B)


      1 package xml
      2 
      3 import (
      4 	"encoding/xml"
      5 	"fmt"
      6 	"io"
      7 )
      8 
      9 // ErrorComponents represents the error response fields
     10 // that will be deserialized from an xml error response body
     11 type ErrorComponents struct {
     12 	Code      string
     13 	Message   string
     14 	RequestID string
     15 }
     16 
     17 // GetErrorResponseComponents returns the error fields from an xml error response body
     18 func GetErrorResponseComponents(r io.Reader, noErrorWrapping bool) (ErrorComponents, error) {
     19 	if noErrorWrapping {
     20 		var errResponse noWrappedErrorResponse
     21 		if err := xml.NewDecoder(r).Decode(&errResponse); err != nil && err != io.EOF {
     22 			return ErrorComponents{}, fmt.Errorf("error while deserializing xml error response: %w", err)
     23 		}
     24 		return ErrorComponents{
     25 			Code:      errResponse.Code,
     26 			Message:   errResponse.Message,
     27 			RequestID: errResponse.RequestID,
     28 		}, nil
     29 	}
     30 
     31 	var errResponse wrappedErrorResponse
     32 	if err := xml.NewDecoder(r).Decode(&errResponse); err != nil && err != io.EOF {
     33 		return ErrorComponents{}, fmt.Errorf("error while deserializing xml error response: %w", err)
     34 	}
     35 	return ErrorComponents{
     36 		Code:      errResponse.Code,
     37 		Message:   errResponse.Message,
     38 		RequestID: errResponse.RequestID,
     39 	}, nil
     40 }
     41 
     42 // noWrappedErrorResponse represents the error response body with
     43 // no internal <Error></Error wrapping
     44 type noWrappedErrorResponse struct {
     45 	Code      string `xml:"Code"`
     46 	Message   string `xml:"Message"`
     47 	RequestID string `xml:"RequestId"`
     48 }
     49 
     50 // wrappedErrorResponse represents the error response body
     51 // wrapped within <Error>...</Error>
     52 type wrappedErrorResponse struct {
     53 	Code      string `xml:"Error>Code"`
     54 	Message   string `xml:"Error>Message"`
     55 	RequestID string `xml:"RequestId"`
     56 }