lighter-sdk 0.1.1

Rust SDK for interacting with the Lighter exchange over REST, WebSocket, and signer-backed transaction flows.
Documentation
use serde::{Deserialize, Serialize};

use super::de::{opt_f64_from_string_or_number, opt_i64_from_string_or_number};

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PublicPoolInfo {
    #[serde(default)]
    #[serde(deserialize_with = "opt_i64_from_string_or_number")]
    pub status: Option<i64>,
    #[serde(default, deserialize_with = "opt_f64_from_string_or_number")]
    pub operator_fee: Option<f64>,
    #[serde(default, deserialize_with = "opt_f64_from_string_or_number")]
    pub min_operator_share_rate: Option<f64>,
    #[serde(default, deserialize_with = "opt_i64_from_string_or_number")]
    pub total_shares: Option<i64>,
    #[serde(default, deserialize_with = "opt_i64_from_string_or_number")]
    pub operator_shares: Option<i64>,
    #[serde(default, deserialize_with = "opt_f64_from_string_or_number")]
    pub annual_percentage_yield: Option<f64>,
    #[serde(default, deserialize_with = "opt_f64_from_string_or_number")]
    pub sharpe_ratio: Option<f64>,
    #[serde(default)]
    pub daily_returns: Vec<DailyReturn>,
    #[serde(default)]
    pub share_prices: Vec<SharePrice>,
    #[serde(flatten)]
    pub extra: serde_json::Map<String, serde_json::Value>,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DailyReturn {
    #[serde(default, deserialize_with = "opt_i64_from_string_or_number")]
    pub timestamp: Option<i64>,
    #[serde(default, deserialize_with = "opt_f64_from_string_or_number")]
    pub daily_return: Option<f64>,
    #[serde(flatten)]
    pub extra: serde_json::Map<String, serde_json::Value>,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SharePrice {
    #[serde(default, deserialize_with = "opt_i64_from_string_or_number")]
    pub timestamp: Option<i64>,
    #[serde(default, deserialize_with = "opt_f64_from_string_or_number")]
    pub share_price: Option<f64>,
    #[serde(flatten)]
    pub extra: serde_json::Map<String, serde_json::Value>,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PublicPoolMetadata {
    #[serde(default, deserialize_with = "opt_i64_from_string_or_number")]
    pub account_index: Option<i64>,
    #[serde(default, deserialize_with = "opt_i64_from_string_or_number")]
    pub created_at: Option<i64>,
    #[serde(default, deserialize_with = "opt_i64_from_string_or_number")]
    pub master_account_index: Option<i64>,
    #[serde(default, deserialize_with = "opt_i64_from_string_or_number")]
    pub public_pool_index: Option<i64>,
    #[serde(default)]
    pub info: Option<PublicPoolInfo>,
    #[serde(default)]
    pub account_share: Option<PublicPoolShare>,
    #[serde(flatten)]
    pub extra: serde_json::Map<String, serde_json::Value>,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PublicPoolShare {
    #[serde(default, deserialize_with = "opt_f64_from_string_or_number")]
    pub amount: Option<f64>,
    #[serde(default, deserialize_with = "opt_i64_from_string_or_number")]
    pub transaction_time: Option<i64>,
    #[serde(flatten)]
    pub extra: serde_json::Map<String, serde_json::Value>,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PublicPoolsMetadata {
    pub code: i64,
    #[serde(default)]
    pub message: Option<String>,
    #[serde(default)]
    pub pools: Vec<PublicPoolMetadata>,
}