koios-sdk 0.1.1

A Rust SDK for the Koios Cardano API
Documentation
use super::{
    transaction::{Certificate, NativeScript, PlutusContract, ProposalProcedure, VotingProcedure},
    AssetItem, PaymentAddress, TransactionOutput, Withdrawal,
};
use serde::{Deserialize, Serialize};

// Fix missing fields in Block struct
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Block {
    pub hash: String,
    pub epoch_no: u64,
    pub abs_slot: u64,
    pub epoch_slot: u64,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub block_height: Option<u64>,
    pub block_size: u64,
    pub block_time: u64,
    pub tx_count: u64,
    pub vrf_key: String,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub pool: Option<String>,
    pub op_cert_counter: u64,
    pub proto_major: u64,
    pub proto_minor: u64,
    pub parent_hash: String,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BlockInfo {
    pub hash: String,
    pub epoch_no: u64,
    pub abs_slot: u64,
    pub epoch_slot: u64,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub block_height: Option<u64>,
    pub block_size: u64,
    pub block_time: u64,
    pub tx_count: u64,
    pub vrf_key: String,
    pub op_cert: String,
    pub op_cert_counter: u64,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub pool: Option<String>,
    pub proto_major: u64,
    pub proto_minor: u64,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub total_output: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub total_fees: Option<String>,
    pub num_confirmations: u64,
    pub parent_hash: String,
    pub child_hash: String,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BlockTransaction {
    pub block_hash: String,
    pub tx_hash: String,
    pub epoch_no: u64,
    pub block_height: u64,
    pub block_time: u64,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BlockTransactionCbor {
    pub tx_hash: String,
    pub block_hash: String,
    pub block_height: u64,
    pub epoch_no: u64,
    pub absolute_slot: u64,
    pub tx_timestamp: u64,
    pub cbor: String,
}

impl Block {
    pub fn new(
        hash: String,
        epoch_no: u64,
        abs_slot: u64,
        epoch_slot: u64,
        block_height: Option<u64>,
        block_size: u64,
        block_time: u64,
        tx_count: u64,
        vrf_key: String,
        pool: Option<String>,
        op_cert_counter: u64,
        proto_major: u64,
        proto_minor: u64,
        parent_hash: String,
    ) -> Self {
        Self {
            hash,
            epoch_no,
            abs_slot,
            epoch_slot,
            block_height,
            block_size,
            block_time,
            tx_count,
            vrf_key,
            pool,
            op_cert_counter,
            proto_major,
            proto_minor,
            parent_hash,
        }
    }
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BlockTxInfo {
    pub tx_hash: String,
    pub block_hash: String,
    pub block_height: u64,
    pub epoch_no: u64,
    pub epoch_slot: u64,
    pub absolute_slot: u64,
    pub tx_timestamp: u64,
    pub tx_block_index: u64,
    pub tx_size: u64,
    pub total_output: String,
    pub fee: String,
    pub treasury_donation: String,
    pub deposit: String,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub invalid_before: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub invalid_after: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub collateral_inputs: Option<Vec<TransactionOutput>>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub collateral_output: Option<Vec<TransactionOutput>>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub reference_inputs: Option<Vec<TransactionOutput>>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub inputs: Option<Vec<TransactionOutput>>,
    pub outputs: Vec<TransactionOutput>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub withdrawals: Option<Vec<Withdrawal>>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub assets_minted: Option<Vec<AssetItem>>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub metadata: Option<serde_json::Value>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub certificates: Option<Vec<Certificate>>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub native_scripts: Option<Vec<NativeScript>>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub plutus_contracts: Option<Vec<PlutusContract>>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub voting_procedures: Option<Vec<VotingProcedure>>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub proposal_procedures: Option<Vec<ProposalProcedure>>,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TxOutput {
    pub payment_addr: PaymentAddress,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub stake_addr: Option<String>,
    pub tx_hash: String,
    pub tx_index: u64,
    pub value: String,
}