rust-genai 0.3.1

Rust SDK for the Google Gemini API and Vertex AI
Documentation
use rust_genai::model_capabilities::{
    validate_code_execution_image_inputs, validate_function_response_media,
};
use rust_genai::types::content::{
    Content, FunctionResponse, FunctionResponseBlob, FunctionResponsePart, Part, Role,
};
use rust_genai::types::tool::{CodeExecution, Tool};
use serde_json::json;

#[test]
fn function_response_media_allowed_on_gemini3() {
    let response = FunctionResponse {
        will_continue: None,
        scheduling: None,
        parts: Some(vec![FunctionResponsePart {
            inline_data: Some(FunctionResponseBlob {
                mime_type: "image/png".to_string(),
                data: vec![1, 2, 3],
                display_name: None,
            }),
            file_data: None,
        }]),
        id: Some("id".to_string()),
        name: Some("fn".to_string()),
        response: Some(json!({"ok": true})),
    };
    let content = Content::from_parts(vec![Part::function_response(response)], Role::Model);
    let result = validate_function_response_media("gemini-3", &[content]);
    assert!(result.is_ok());
}

#[test]
fn code_execution_image_inputs_file_data_ok() {
    let tool = Tool {
        code_execution: Some(CodeExecution {}),
        ..Default::default()
    };
    let content = Content::from_parts(vec![Part::file_data("files/abc", "image/png")], Role::User);
    let result = validate_code_execution_image_inputs("gemini-3", &[content], Some(&[tool]));
    assert!(result.is_ok());
}

#[test]
fn code_execution_image_inputs_no_image_ok() {
    let tool = Tool {
        code_execution: Some(CodeExecution {}),
        ..Default::default()
    };
    let content = Content::from_parts(vec![Part::text("hello")], Role::User);
    let result = validate_code_execution_image_inputs("gemini-3", &[content], Some(&[tool]));
    assert!(result.is_ok());
}