ax-exchange-sdk 1.0.2

ArchitectX SDK
Documentation
//! API Protocol Types
//!
//! This module contains types used for API protocol communication (over-the-wire).

use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
use std::collections::HashMap;

/// Pagination parameters for API requests
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PaginationParams {
    pub limit: Option<u32>,
    pub offset: Option<u32>,
}

/// Standard API response wrapper
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PaginatedResponse<T> {
    pub data: T,
    pub metadata: Option<PaginationMetadata>,
}

// TODO: this struct is incoherent
/// Response metadata for pagination and counts
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PaginationMetadata {
    pub total_count: Option<u64>,
    pub total: Option<u64>,
    pub page: Option<u32>,
    pub per_page: Option<u32>,
    pub limit: Option<u32>,
    pub offset: Option<u32>,
}

// TODO: rename to HistoricalRangeParams and delete HistoryParams
// and HistoryResponse as a bad abstraction; instead we ought to
// have individual requests compose DateRangeParams and
// PaginationParams as appropriate.
/// Date range parameters for API requests
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DateRangeParams {
    pub start_time: Option<DateTime<Utc>>,
    pub end_time: Option<DateTime<Utc>>,
}

/// History query parameters
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct HistoryParams {
    pub symbol: Option<String>,
    pub start_time: Option<DateTime<Utc>>,
    pub end_time: Option<DateTime<Utc>>,
    pub limit: Option<u32>,
    pub pagination: Option<PaginationParams>,
    pub date_range: Option<DateRangeParams>,
    pub filters: Option<HashMap<String, String>>,
}

/// Generic history response wrapper
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct HistoryResponse<T> {
    pub data: Vec<T>,
    pub total: u64,
    pub limit: u32,
    pub offset: u32,
}