systemprompt_models/api/errors/
extension.rs1use systemprompt_traits::ExtensionError;
7
8use super::{ApiError, ErrorCode};
9
10const EXTENSION_FAILURE: &str = "Extension operation failed";
11
12impl ApiError {
13 pub fn from_extension<E: ExtensionError>(err: E) -> Self {
14 let code = match err.status().as_u16() {
15 400 => ErrorCode::BadRequest,
16 401 => ErrorCode::Unauthorized,
17 403 => ErrorCode::Forbidden,
18 404 => ErrorCode::NotFound,
19 409 => ErrorCode::ConflictError,
20 410 => ErrorCode::Gone,
21 413 => ErrorCode::PayloadTooLarge,
22 423 => ErrorCode::Locked,
23 422 => ErrorCode::ValidationError,
24 429 => ErrorCode::RateLimited,
25 503 => ErrorCode::ServiceUnavailable,
26 status if status >= 500 => ErrorCode::InternalError,
27 _ => ErrorCode::BadRequest,
28 };
29 let key = err.code();
30 if code.is_server_error() {
31 return Self::new(code, EXTENSION_FAILURE)
32 .with_error_key(key)
33 .with_source(err);
34 }
35 Self::new(code, err.user_message())
36 .with_error_key(key)
37 .with_source(err)
38 }
39}