in go/protocol/internal/errutil/protocol.go [25:119]
func ToUserProp(err error) map[string]string {
if err == nil {
return (&result{status: 200}).props()
}
var message string
var kind errors.Kind
switch e := err.(type) {
case *errors.Client:
message = e.Message
kind = e.Kind
case *errors.Remote:
message = e.Message
kind = e.Kind
default:
return (&result{
status: 500,
message: "invalid error",
}).props()
}
switch k := kind.(type) {
case errors.HeaderMissing:
return (&result{
status: 400,
message: message,
name: k.HeaderName,
}).props()
case errors.HeaderInvalid:
if k.HeaderName == constants.ContentType ||
k.HeaderName == constants.FormatIndicator {
return (&result{
status: 415,
message: message,
name: k.HeaderName,
value: k.HeaderValue,
}).props()
}
return (&result{
status: 400,
message: message,
name: k.HeaderName,
value: k.HeaderValue,
}).props()
case errors.PayloadInvalid:
return (&result{
status: 400,
message: message,
}).props()
case errors.Timeout:
return (&result{
status: 408,
message: message,
name: k.TimeoutName,
value: duration.Format(k.TimeoutValue),
}).props()
case errors.StateInvalid:
return (&result{
status: 503,
message: message,
name: k.PropertyName,
}).props()
case errors.InternalLogicError:
return (&result{
status: 500,
message: message,
//nolint:staticcheck // Capture for wire protocol compat.
name: k.PropertyName,
}).props()
case errors.UnknownError:
return (&result{
status: 500,
message: message,
}).props()
case errors.ExecutionError:
return (&result{
status: 500,
message: message,
application: true,
}).props()
case errors.UnsupportedVersion:
return (&result{
status: 505,
message: message,
version: k.ProtocolVersion,
supportedVersions: k.SupportedMajorProtocolVersions,
}).props()
default:
return (&result{
status: 500,
message: "invalid error kind",
name: "Kind",
}).props()
}
}