maestro-rust-sdk 1.1.2

Rust SDK for the Maestro Dapp Platform
Documentation
use super::maestro::Maestro;
use crate::utils;
use serde::{Deserialize, Serialize};
use std::error::Error;

#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct OperationalCertificate {
    pub hot_vkey: String,
    pub kes_period: i64,
    pub kes_signature: String,
    pub sequence_number: i64,
}

#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct TotalExUnits {
    pub mem: i64,
    pub steps: i64,
}

#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct BlockInfoData {
    pub absolute_slot: i64,
    pub block_producer: String,
    pub confirmations: i64,
    pub epoch: i64,
    pub epoch_slot: i64,
    pub era: String,
    pub hash: String,
    pub height: i64,
    pub operational_certificate: OperationalCertificate,
    pub previous_block: String,
    pub protocol_version: Vec<i32>,
    pub script_invocations: i32,
    pub size: i32,
    pub timestamp: String,
    pub total_ex_units: TotalExUnits,
    pub total_fees: i64,
    pub total_output_lovelace: String,
    pub tx_hashes: Vec<String>,
    pub vrf_key: String,
}

#[derive(Deserialize, Debug, Clone)]
pub struct BlockInfo {
    pub data: BlockInfoData,
    pub last_updated: utils::last_updated::LastUpdated,
}

impl Maestro {
    pub async fn block_info(&self, block_height: i64) -> Result<BlockInfo, Box<dyn Error>> {
        let url = format!("/blocks/{}", block_height);

        let response = self.get(&url).await?;

        let block_info =
            serde_json::from_str(&response).map_err(|e| Box::new(e) as Box<dyn Error>)?;

        Ok(block_info)
    }
}