koios-sdk 0.1.1

A Rust SDK for the Koios Cardano API
Documentation
use serde::{Deserialize, Serialize};

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct EpochInfo {
    pub epoch_no: u64,
    pub out_sum: String,
    pub fees: String,
    pub tx_count: u64,
    pub blk_count: u64,
    pub start_time: u64,
    pub end_time: u64,
    pub first_block_time: u64,
    pub last_block_time: u64,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub active_stake: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub total_rewards: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub avg_blk_reward: Option<String>,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct EpochParams {
    pub epoch_no: u64,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub min_fee_a: Option<u64>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub min_fee_b: Option<u64>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub max_block_size: Option<u64>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub max_tx_size: Option<u64>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub max_bh_size: Option<u64>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub key_deposit: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub pool_deposit: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub max_epoch: Option<u64>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub optimal_pool_count: Option<u64>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub influence: Option<f64>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub monetary_expand_rate: Option<f64>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub treasury_growth_rate: Option<f64>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub decentralisation: Option<f64>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub extra_entropy: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub protocol_major: Option<u64>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub protocol_minor: Option<u64>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub min_utxo_value: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub min_pool_cost: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub nonce: Option<String>,
    pub block_hash: String, // Changed from Option<String>
    #[serde(skip_serializing_if = "Option::is_none")]
    pub cost_models: Option<serde_json::Value>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub price_mem: Option<f64>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub price_step: Option<f64>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub max_tx_ex_mem: Option<u64>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub max_tx_ex_steps: Option<u64>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub max_block_ex_mem: Option<u64>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub max_block_ex_steps: Option<u64>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub max_val_size: Option<u64>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub collateral_percent: Option<u64>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub max_collateral_inputs: Option<u64>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub coins_per_utxo_size: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub pvt_motion_no_confidence: Option<f64>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub pvt_committee_normal: Option<f64>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub pvt_committee_no_confidence: Option<f64>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub pvt_hard_fork_initiation: Option<f64>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub dvt_motion_no_confidence: Option<f64>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub dvt_committee_normal: Option<f64>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub dvt_committee_no_confidence: Option<f64>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub dvt_update_to_constitution: Option<f64>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub dvt_hard_fork_initiation: Option<f64>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub dvt_p_p_network_group: Option<f64>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub dvt_p_p_economic_group: Option<f64>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub dvt_p_p_technical_group: Option<f64>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub dvt_p_p_gov_group: Option<f64>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub dvt_treasury_withdrawal: Option<f64>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub committee_min_size: Option<u64>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub committee_max_term_length: Option<u64>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub gov_action_lifetime: Option<u64>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub gov_action_deposit: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub drep_deposit: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub drep_activity: Option<u64>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub pvtpp_security_group: Option<f64>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub min_fee_ref_script_cost_per_byte: Option<u64>,
}

#[derive(Debug, Clone, Serialize, Copy, Deserialize)]
pub struct EpochBlockProtocol {
    pub proto_major: u64,
    pub proto_minor: u64,
    pub blocks: u64,
}

// Implementation blocks for constructors and helper methods
impl EpochInfo {
    pub fn new(
        epoch_no: u64,
        out_sum: String,
        fees: String,
        tx_count: u64,
        blk_count: u64,
        start_time: u64,
        end_time: u64,
        first_block_time: u64,
        last_block_time: u64,
    ) -> Self {
        Self {
            epoch_no,
            out_sum,
            fees,
            tx_count,
            blk_count,
            start_time,
            end_time,
            first_block_time,
            last_block_time,
            active_stake: None,
            total_rewards: None,
            avg_blk_reward: None,
        }
    }
}