openrouter-rust 0.1.0

A modular, type-safe Rust client for the OpenRouter API
Documentation
use mockito::Server;
use openrouter_rust::{
    OpenRouterClient,
    providers::{Provider, ProvidersResponse},
};
use serde_json::json;

#[tokio::test]
async fn test_list_providers() {
    let mut server = Server::new_async().await;
    
    let mock_response = json!({
        "data": [
            {
                "name": "OpenAI",
                "slug": "openai",
                "privacy_policy_url": "https://openai.com/privacy",
                "terms_of_service_url": "https://openai.com/terms",
                "status_page_url": "https://status.openai.com"
            },
            {
                "name": "Anthropic",
                "slug": "anthropic",
                "privacy_policy_url": "https://www.anthropic.com/privacy",
                "terms_of_service_url": null,
                "status_page_url": null
            }
        ]
    });

    let _m = server.mock("GET", "/providers")
        .match_header("authorization", "Bearer test-key")
        .with_status(200)
        .with_header("content-type", "application/json")
        .with_body(mock_response.to_string())
        .create_async()
        .await;

    let client = OpenRouterClient::builder()
        .api_key("test-key")
        .base_url(&server.url())
        .build()
        .unwrap();

    let response = client.list_providers().await.unwrap();

    assert_eq!(response.data.len(), 2);
    assert_eq!(response.data[0].name, "OpenAI");
    assert_eq!(response.data[0].slug, "openai");
    assert_eq!(response.data[0].privacy_policy_url, Some("https://openai.com/privacy".to_string()));
    assert_eq!(response.data[1].name, "Anthropic");
    assert_eq!(response.data[1].terms_of_service_url, None);
}

#[tokio::test]
async fn test_list_providers_empty() {
    let mut server = Server::new_async().await;
    
    let mock_response = json!({"data": []});

    let _m = server.mock("GET", "/providers")
        .with_status(200)
        .with_header("content-type", "application/json")
        .with_body(mock_response.to_string())
        .create_async()
        .await;

    let client = OpenRouterClient::builder()
        .api_key("test-key")
        .base_url(&server.url())
        .build()
        .unwrap();

    let response = client.list_providers().await.unwrap();
    assert!(response.data.is_empty());
}

#[test]
fn test_provider_struct() {
    let provider = Provider {
        name: "Test Provider".to_string(),
        slug: "test-provider".to_string(),
        privacy_policy_url: Some("https://example.com/privacy".to_string()),
        terms_of_service_url: None,
        status_page_url: Some("https://status.example.com".to_string()),
    };

    assert_eq!(provider.name, "Test Provider");
    assert_eq!(provider.slug, "test-provider");
    assert!(provider.privacy_policy_url.is_some());
    assert!(provider.terms_of_service_url.is_none());
}