aimo-client 0.1.3

AiMo Network REST API types and client
Documentation
use aimo_client::types::statistics::{
    ProviderMetadataResponse, ProviderModelItem, UserBalanceItem, UserBalanceResponse,
};
use aimo_core::provider::{Category, Model, ModelProvider, Price, ProviderMetadata};

#[test]
fn test_category_serialization() {
    let metadata = ProviderMetadata::ModelProvider(ModelProvider {
        id: "test-provider".to_string(),
        name: "Test Provider".to_string(),
        models: vec![Model {
            name: "test-model".to_string(),
            display_name: String::new(),
            provider_name: String::new(),
            pricing: vec![Price {
                token: "test-mint".to_string(),
                input_price: 1000,
                output_price: 2000,
            }],
        }],
        category: Category::CompletionModel,
    });

    let items = ProviderModelItem::from_provider_metadata("test-id".to_string(), &metadata);
    assert_eq!(items.len(), 1);
    assert_eq!(items[0].category, "completion_model");

    let response =
        ProviderMetadataResponse::from_provider_metadata("test-id".to_string(), metadata);
    assert_eq!(response.category, "completion_model");
}

#[test]
fn test_user_balance_serialization() {
    let balance_item = UserBalanceItem {
        token: "So11111111111111111111111111111111111111112".to_string(),
        available: 5000,
        locked: 2000,
        total: 7000,
    };

    let balance_response = UserBalanceResponse {
        balance: vec![balance_item.clone()],
    };

    // Test serialization to JSON
    let json = serde_json::to_string(&balance_response).unwrap();
    assert!(json.contains("\"token\":\"So11111111111111111111111111111111111111112\""));
    assert!(json.contains("\"available\":5000"));
    assert!(json.contains("\"locked\":2000"));
    assert!(json.contains("\"total\":7000"));

    // Test deserialization from JSON
    let deserialized: UserBalanceResponse = serde_json::from_str(&json).unwrap();
    assert_eq!(deserialized.balance.len(), 1);
    assert_eq!(deserialized.balance[0].token, balance_item.token);
    assert_eq!(deserialized.balance[0].available, balance_item.available);
    assert_eq!(deserialized.balance[0].locked, balance_item.locked);
    assert_eq!(deserialized.balance[0].total, balance_item.total);
}