in dax/internal/client/error.go [147:274]
func decodeError(reader *cbor.Reader) (error, error) {
length, err := reader.ReadArrayLength()
if err != nil {
return nil, err
}
if length == 0 {
return nil, nil
}
codes := make([]int, length)
for i := 0; i < length; i++ {
codes[i], err = reader.ReadInt()
if err != nil {
return nil, err
}
}
msg, err := reader.ReadString()
if err != nil {
return nil, err
}
var requestId, errorCode string
var statusCode int
var cancellationReasonCodes, cancellationReasonMsgs []*string
var cancellationReasonItems []byte
hdr, err := reader.PeekHeader()
if err != nil {
return nil, err
}
if hdr == cbor.Nil {
if err := reader.ReadNil(); err != nil {
return nil, err
}
} else {
length, err = reader.ReadArrayLength()
if err != nil {
return nil, err
}
if (length < 3) || (length > 4) {
return nil, &smithy.DeserializationError{Err: fmt.Errorf("expected 3 or 4 elements for error info, got %d", length)}
}
if hdr, err = reader.PeekHeader(); err != nil {
return nil, err
} else if hdr == cbor.Nil {
if err := reader.ReadNil(); err != nil {
return nil, err
}
} else if requestId, err = reader.ReadString(); err != nil {
return nil, err
}
if hdr, err = reader.PeekHeader(); err != nil {
return nil, err
} else if hdr == cbor.Nil {
if err := reader.ReadNil(); err != nil {
return nil, err
}
} else if errorCode, err = reader.ReadString(); err != nil {
return nil, err
}
if hdr, err = reader.PeekHeader(); err != nil {
return nil, err
} else if hdr == cbor.Nil {
if err := reader.ReadNil(); err != nil {
return nil, err
}
} else if statusCode, err = reader.ReadInt(); err != nil {
return nil, err
}
if length == 4 {
arrLen, err := reader.ReadArrayLength()
if err != nil {
return nil, err
}
if arrLen%3 != 0 {
return nil, &smithy.DeserializationError{Err: fmt.Errorf("error found when parsing CancellationReasons")}
}
cancellationReasonsLen := arrLen / 3
cancellationReasonCodes = make([]*string, cancellationReasonsLen)
cancellationReasonMsgs = make([]*string, cancellationReasonsLen)
itemsBuf := bytes.Buffer{}
for i := 0; i < cancellationReasonsLen; i++ {
if consumed, err := consumeNil(reader); err != nil {
return nil, err
} else if !consumed {
s, err := reader.ReadString()
cancellationReasonCodes[i] = aws.String(s)
if err != nil {
return nil, err
}
}
if consumed, err := consumeNil(reader); err != nil {
return nil, err
} else if !consumed {
s, err := reader.ReadString()
cancellationReasonMsgs[i] = aws.String(s)
if err != nil {
return nil, err
}
}
if consumed, err := consumeNil(reader); err != nil {
return nil, err
} else if !consumed {
if err := reader.ReadRawBytes(&itemsBuf); err != nil {
return nil, err
}
} else {
itemsBuf.WriteByte(byte(cbor.Nil))
}
}
cancellationReasonItems = itemsBuf.Bytes()
}
}
if statusCode == 0 {
statusCode = inferStatusCode(codes)
}
// user or server error
if cancellationReasonCodes != nil && len(cancellationReasonCodes) > 0 {
return newDaxTransactionCanceledFailure(codes, errorCode, msg, requestId, statusCode,
cancellationReasonCodes, cancellationReasonMsgs, cancellationReasonItems), nil
}
return newDaxRequestFailure(codes, errorCode, msg, requestId, statusCode, smithy.FaultServer), nil
}