(id toolspkg.ToolID, err error, status int)
| 470 | } |
| 471 | |
| 472 | func nativeHTTPStatusToolError(id toolspkg.ToolID, err error, status int) error { |
| 473 | code := toolspkg.ErrorCodeBackendFailed |
| 474 | cause := toolspkg.ErrToolBackendFailed |
| 475 | reason := toolspkg.ReasonBackendUnhealthy |
| 476 | switch status { |
| 477 | case http.StatusBadRequest, http.StatusUnprocessableEntity, http.StatusRequestEntityTooLarge: |
| 478 | code = toolspkg.ErrorCodeInvalidInput |
| 479 | cause = toolspkg.ErrToolInvalidInput |
| 480 | reason = toolspkg.ReasonConfigValidationFailed |
| 481 | case http.StatusForbidden: |
| 482 | code = toolspkg.ErrorCodeDenied |
| 483 | cause = toolspkg.ErrToolDenied |
| 484 | reason = toolspkg.ReasonPolicyDenied |
| 485 | case http.StatusNotFound: |
| 486 | code = toolspkg.ErrorCodeNotFound |
| 487 | cause = toolspkg.ErrToolNotFound |
| 488 | reason = toolspkg.ReasonToolUnknown |
| 489 | case http.StatusConflict: |
| 490 | code = toolspkg.ErrorCodeConflict |
| 491 | cause = toolspkg.ErrToolConflict |
| 492 | reason = toolspkg.ReasonConflictedID |
| 493 | case http.StatusServiceUnavailable: |
| 494 | code = toolspkg.ErrorCodeUnavailable |
| 495 | cause = toolspkg.ErrToolUnavailable |
| 496 | reason = toolspkg.ReasonDependencyMissing |
| 497 | } |
| 498 | return toolspkg.NewToolError( |
| 499 | code, |
| 500 | id, |
| 501 | err.Error(), |
| 502 | fmt.Errorf("%w: %w", cause, err), |
| 503 | reason, |
| 504 | ) |
| 505 | } |
no test coverage detected