use serde::Deserialize;
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
pub struct SpecGenerateContentResponse {
#[serde(default)]
pub candidates: Vec<SpecCandidate>,
#[serde(default)]
pub prompt_feedback: Option<serde_json::Value>,
#[serde(default)]
pub usage_metadata: Option<SpecUsageMetadata>,
#[serde(default)]
pub model_version: Option<String>,
#[serde(default)]
pub response_id: Option<String>,
#[serde(default)]
pub model_status: Option<serde_json::Value>,
}
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
pub struct SpecCandidate {
pub content: SpecContent,
#[serde(default)]
pub index: Option<u64>,
#[serde(default)]
pub finish_reason: Option<String>,
#[serde(default)]
pub finish_message: Option<String>,
#[serde(default)]
pub safety_ratings: Option<Vec<serde_json::Value>>,
#[serde(default)]
pub citation_metadata: Option<serde_json::Value>,
#[serde(default)]
pub avg_logprobs: Option<f64>,
#[serde(default)]
pub token_count: Option<u64>,
#[serde(default)]
pub grounding_attributions: Option<Vec<serde_json::Value>>,
#[serde(default)]
pub grounding_metadata: Option<serde_json::Value>,
#[serde(default)]
pub logprobs_result: Option<serde_json::Value>,
#[serde(default)]
pub url_context_metadata: Option<serde_json::Value>,
}
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
pub struct SpecContent {
pub parts: Vec<SpecPart>,
#[serde(default)]
pub role: Option<String>,
}
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
pub struct SpecPart {
#[serde(default)]
pub text: Option<String>,
#[serde(default)]
pub function_call: Option<SpecFunctionCall>,
#[serde(default)]
pub thought: Option<bool>,
#[serde(default)]
pub thought_signature: Option<serde_json::Value>,
#[serde(default)]
pub executable_code: Option<serde_json::Value>,
#[serde(default)]
pub code_execution_result: Option<serde_json::Value>,
}
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
pub struct SpecFunctionCall {
pub name: String,
pub args: serde_json::Value,
#[serde(default)]
pub id: Option<String>,
}
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
pub struct SpecUsageMetadata {
#[serde(default)]
pub prompt_token_count: Option<u64>,
#[serde(default)]
pub candidates_token_count: Option<u64>,
#[serde(default)]
pub total_token_count: Option<u64>,
#[serde(default)]
pub cached_content_token_count: Option<u64>,
#[serde(default)]
pub tool_use_prompt_token_count: Option<u64>,
#[serde(default)]
pub thoughts_token_count: Option<u64>,
#[serde(default)]
pub prompt_tokens_details: Option<serde_json::Value>,
#[serde(default)]
pub cache_tokens_details: Option<serde_json::Value>,
#[serde(default)]
pub candidates_tokens_details: Option<serde_json::Value>,
#[serde(default)]
pub tool_use_prompt_tokens_details: Option<serde_json::Value>,
}
#[derive(Debug, Deserialize)]
#[serde(deny_unknown_fields)]
pub struct SpecGeminiErrorResponse {
pub error: SpecGeminiError,
}
#[derive(Debug, Deserialize)]
#[serde(deny_unknown_fields)]
pub struct SpecGeminiError {
pub code: u64,
pub message: String,
pub status: String,
}