structured_output/
structured_output.rs1use gemini_client_api::gemini::ask::Gemini;
2use gemini_client_api::gemini::types::sessions::Session;
3use gemini_client_api::gemini::utils::{GeminiSchema, gemini_schema};
4use serde::Deserialize;
5use std::env;
6
7#[derive(Debug, Deserialize)]
10#[gemini_schema]
11#[allow(dead_code)]
12struct MovieReview {
13 title: String,
15 rating: u8,
17 cast: Vec<String>,
19 summary: String,
21}
22
23#[tokio::main]
24async fn main() {
25 let mut session = Session::new(2).set_remember_reply(false);
26 let api_key = env::var("GEMINI_API_KEY").expect("GEMINI_API_KEY must be set");
27
28 let ai =
30 Gemini::new(api_key, "gemini-2.5-flash", None).set_json_mode(MovieReview::gemini_schema());
31
32 let prompt = "Give me a review for the movie Interstellar.";
33 println!("User: {}", prompt);
34
35 let response = ai.ask(session.ask(prompt)).await.unwrap();
36 let review: MovieReview = response
37 .get_json()
38 .expect("Gemini responded with wrong structure");
39
40 println!("Gemini structured output:\n{review:#?}");
41}