openrouter-rs 0.14.0

A type-safe OpenRouter Rust SDK
Documentation
use openrouter_rs::types::{ResponseFormat, ResponseFormatType};
use serde_json::json;

#[test]
fn test_response_format_text_serialize() {
    let format = ResponseFormat::text();
    let value = serde_json::to_value(&format).expect("text format should serialize");
    assert_eq!(value["type"], "text");
}

#[test]
fn test_response_format_json_object_serialize() {
    let format = ResponseFormat::json_object();
    let value = serde_json::to_value(&format).expect("json_object format should serialize");
    assert_eq!(value["type"], "json_object");
}

#[test]
fn test_response_format_json_schema_serialize() {
    let format = ResponseFormat::json_schema(
        "math_response",
        true,
        json!({
            "type": "object",
            "properties": {
                "answer": { "type": "number" }
            },
            "required": ["answer"]
        }),
    );

    let value = serde_json::to_value(&format).expect("json_schema format should serialize");
    assert_eq!(value["type"], "json_schema");
    assert_eq!(value["json_schema"]["name"], "math_response");
    assert_eq!(value["json_schema"]["strict"], true);
}

#[test]
fn test_response_format_grammar_serialize() {
    let format = ResponseFormat::grammar("root ::= \"yes\" | \"no\"");
    let value = serde_json::to_value(&format).expect("grammar format should serialize");
    assert_eq!(value["type"], "grammar");
    assert_eq!(value["grammar"], "root ::= \"yes\" | \"no\"");
}

#[test]
fn test_response_format_python_serialize() {
    let format = ResponseFormat::python();
    let value = serde_json::to_value(&format).expect("python format should serialize");
    assert_eq!(value["type"], "python");
}

#[test]
fn test_response_format_legacy_type_only_deserialize() {
    let format: ResponseFormat = serde_json::from_str("\"json_object\"")
        .expect("legacy type-only format should deserialize");

    match format {
        ResponseFormat::TypeOnly(ResponseFormatType::JsonObject) => {}
        _ => panic!("expected legacy TypeOnly(JsonObject)"),
    }
}