jsonErrorCode derives stable script-facing codes from existing CLI errors. Prefer coded errors for dbxcli-owned validation failures. String matching is kept only for Cobra-generated unknown command/flag errors and legacy fallback.
(err error)
| 415 | // Prefer coded errors for dbxcli-owned validation failures. String matching is |
| 416 | // kept only for Cobra-generated unknown command/flag errors and legacy fallback. |
| 417 | func jsonErrorCode(err error) string { |
| 418 | var coded jsonCodedError |
| 419 | if errors.As(err, &coded) { |
| 420 | return coded.JSONErrorCode() |
| 421 | } |
| 422 | if errors.Is(err, output.ErrStructuredOutputUnsupported) { |
| 423 | return jsonErrorCodeStructuredOutputUnsupported |
| 424 | } |
| 425 | if code := dropboxAPIJSONErrorCode(err); code != "" { |
| 426 | return code |
| 427 | } |
| 428 | |
| 429 | message := err.Error() |
| 430 | switch { |
| 431 | case strings.Contains(message, "unknown command"): |
| 432 | return jsonErrorCodeUnknownCommand |
| 433 | case strings.Contains(message, "unknown flag"): |
| 434 | return jsonErrorCodeUnknownFlag |
| 435 | default: |
| 436 | return jsonErrorCodeCommandFailed |
| 437 | } |
| 438 | } |
| 439 | |
| 440 | func jsonErrorDetails(err error) map[string]any { |
| 441 | details := make(map[string]any) |