Hi Rustaceans! I'm excited to share my new crate for working with Google's AI APIs: google-ai-rs
Why this exists:
- Provides strict type safety for Google's Gemini API responses
 - Handles JSON schema validation at compile time
 - Supports both gRPC and REST with async/await
 - Implements full API surface (chat, embeddings, model management)
 
Key Features:
// Schema validation example
#[derive(AsSchema)]
#[schema(description = "Validated customer purchase order")]
#[schema(rename_all = "camelCase")]
pub struct Order {
    #[schema(
        description = "Order items with quantity and pricing"
    )]
    pub items: Vec<OrderItem>,
    #[schema(
        description = "Customer contact information"
    )]
    pub customer: Customer,
    #[schema(description = "Total amount in USD")]
    pub total: f64,
    pub status: OrderStatus
}
#[derive(AsSchema)]
#[schema(rename_all = "camelCase")]
enum OrderStatus {
    Pending,
    Processing,
    Shipped,
    Canceled,
}
let result = model.as_schema::<Vec<Order>>()
        .generate_content("Return top 5 orders").await?;
Flexible Input Handling:
// Mix text and binary inputs
model.generate_content((
    "Explain this diagram",
    Part::blob("image/png", diagram_bytes),
    "Include technical specs"
)).await?;
Production Ready:
- Connection pooling via tonic/hyper
 - Configurable retry policies
 - Proper error handling variants
 - Benchmark: 2-3x faster than pure REST implementations
 
Getting Started:
[dependencies]
google-ai-rs = "0.1.0"
use google_ai_rs::{Client, generative::GenerativeModel};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let client = Client::new(env!("API_KEY").into())?;
    let response = client.generative_model("gemini-pro")
        .generate_content("Explain borrow checker using cooking analogies")
        .await?;
    println!("{}", response.text());
    Ok(())
}
Links:
Would love feedback from anyone working with AI APIs in Rust! Particularly interested in:
- Schema derivation patterns
 - Error handling ergonomics
 - gRPC vs REST tradeoffs
 
    
Top comments (0)