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 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}