1use ferrin_provider_util::http::JsonErrorResponseHandler;
4use ferrin_provider_util::http::json_error_response_handler;
5use ferrin_spec::JsonValue;
6use serde::Deserialize;
7
8#[derive(Debug, Clone, Deserialize)]
10pub struct GoogleErrorData {
11 pub error: GoogleErrorDetail,
13}
14
15#[derive(Debug, Clone, Deserialize)]
17pub struct GoogleErrorDetail {
18 #[serde(default)]
20 pub code: Option<i64>,
21 #[serde(default)]
23 pub message: Option<String>,
24 #[serde(default)]
26 pub status: Option<String>,
27 #[serde(default)]
29 pub details: Option<Vec<JsonValue>>,
30}
31
32#[must_use]
34pub fn error_message(data: &GoogleErrorData) -> String {
35 data.error
36 .message
37 .clone()
38 .unwrap_or_else(|| "Google Generative AI request failed".to_owned())
39}
40
41#[must_use]
43pub fn failed_response_handler() -> JsonErrorResponseHandler<GoogleErrorData> {
44 json_error_response_handler::<GoogleErrorData>(error_message)
45}