func ToUserProp()

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()
	}
}