| 472 | } |
| 473 | |
| 474 | func toolErrorResponseForError(err error) (ToolErrorResponseRecord, bool) { |
| 475 | if apiErr, ok := errors.AsType[*toolAPIError](err); ok { |
| 476 | return apiErr.Response(), true |
| 477 | } |
| 478 | if commandErr, ok := errors.AsType[*toolCommandError](err); ok { |
| 479 | return sanitizeToolErrorResponse(commandErr.response), true |
| 480 | } |
| 481 | if toolErr, ok := errors.AsType[*toolspkg.ToolError](err); ok { |
| 482 | return sanitizeToolErrorResponse(ToolErrorResponseRecord{ |
| 483 | Error: contract.ToolErrorPayload{ |
| 484 | Code: toolErr.Code, |
| 485 | Message: toolErr.Error(), |
| 486 | ToolID: toolErr.ToolID, |
| 487 | ReasonCodes: append([]toolspkg.ReasonCode(nil), toolErr.ReasonCodes...), |
| 488 | Layer: toolOperatorCLIKey, |
| 489 | }, |
| 490 | }), true |
| 491 | } |
| 492 | if validationErr, ok := errors.AsType[*toolspkg.ValidationError](err); ok { |
| 493 | return sanitizeToolErrorResponse(ToolErrorResponseRecord{ |
| 494 | Error: contract.ToolErrorPayload{ |
| 495 | Code: toolspkg.ErrorCodeInvalidInput, |
| 496 | Message: validationErr.Error(), |
| 497 | ReasonCodes: []toolspkg.ReasonCode{validationErr.Reason}, |
| 498 | Layer: toolOperatorCLIKey, |
| 499 | }, |
| 500 | }), true |
| 501 | } |
| 502 | return ToolErrorResponseRecord{}, false |
| 503 | } |
| 504 | |
| 505 | func toolValidationCommandError( |
| 506 | id toolspkg.ToolID, |