rusty_gemini/
error.rs

1use crate::api::GeminiGenericError;
2
3#[derive(Debug)]
4pub struct GeminiError {
5    pub kind: GeminiErrorKind,
6    pub message: String,
7}
8
9impl GeminiError {
10    pub(crate) fn message(msg: &str) -> Self {
11        Self {
12            kind: GeminiErrorKind::Other,
13            message: msg.to_string(),
14        }
15    }
16}
17
18#[derive(Debug)]
19#[non_exhaustive]
20pub enum GeminiErrorKind {
21    InvalidArgument,
22    UnsupportedCountry,
23    PermissionDenied,
24    ResourceExhausted,
25    Internal,
26    ServiceUnavailable,
27    /// This can be returned due to errors in t serialization etc
28    /// And not necessarily by the Gemini API
29    Other,
30}
31
32impl From<GeminiGenericError> for GeminiError {
33    fn from(value: GeminiGenericError) -> Self {
34        let kind = match value.status.as_str() {
35            "INVALID_ARGUMENT" => GeminiErrorKind::InvalidArgument,
36            "FAILED_PRECONDITION" => GeminiErrorKind::UnsupportedCountry,
37            "PERMISSION_DENIED" => GeminiErrorKind::PermissionDenied,
38            "RESOURCE_EXHAUSTED" => GeminiErrorKind::ResourceExhausted,
39            "INTERNAL" => GeminiErrorKind::Internal,
40            "UNAVAILABLE" => GeminiErrorKind::ServiceUnavailable,
41            _ => GeminiErrorKind::Other,
42        };
43
44        let message = value.message;
45        Self { kind, message }
46    }
47}