use serde_json::Value;
use crate::canonical::{CanonicalError, ErrorKind};
use crate::protocol::json::text_of;
pub(super) fn error_value(v: &Value) -> CanonicalError {
let err = &v["error"];
CanonicalError {
kind: error_kind(err["type"].as_str().unwrap_or_default()),
message: text_of(err, "message"),
provider_detail: Some(err.clone()),
retry_after_seconds: None,
}
}
fn error_kind(t: &str) -> ErrorKind {
use ErrorKind::Provider;
match t {
"authentication_error" | "permission_error" => ErrorKind::Auth,
"invalid_request_error" => Provider { status: 400 },
"billing_error" => Provider { status: 402 },
"not_found_error" => Provider { status: 404 },
"request_too_large" => Provider { status: 413 },
"rate_limit_error" => Provider { status: 429 },
"api_error" => Provider { status: 500 },
"timeout_error" => Provider { status: 504 },
"overloaded_error" => Provider { status: 529 },
_ => ErrorKind::Transport, }
}