google_genai/
error.rs

1use std::collections::HashMap;
2use thiserror;
3
4pub type Result<T> = std::result::Result<T, GenAiError>;
5
6/// Error variants returned by the Google GenAI API client.
7#[derive(thiserror::Error, Debug)]
8pub enum GenAiError {
9    /// Remote API error with status code, message and headers.
10    /// Header names are guaranteed to be lowercase.
11    #[error("Remote error {status}: {message}")]
12    Remote {
13        status: u16,
14        message: String,
15        headers: HashMap<String, String>,
16    },
17
18    /// Internal client errors.
19    #[error("Internal error: {0}")]
20    Internal(String),
21}
22
23impl GenAiError {
24    pub async fn from_response(response: reqwest::Response) -> Self {
25        let status = response.status().as_u16();
26        let headers = response
27            .headers()
28            .iter()
29            .map(|(k, v)| {
30                (
31                    k.as_str().to_lowercase(),
32                    v.to_str().unwrap_or_default().to_string(),
33                )
34            })
35            .collect();
36        let message = response.text().await.unwrap_or_default();
37        GenAiError::Remote {
38            status,
39            message,
40            headers,
41        }
42    }
43}