stellar-data 0.1.5

A command line tool and REST API for querying the Stellar blockchain using public data lakes and RPC nodes, providing JSON formatted responses to simplify data availability
use anyhow::{Context, Result};

#[allow(dead_code)]
#[derive(serde::Deserialize)]
struct HorizonLedger {
    sequence: u32,
}

/// Fetch the latest ledger number from Stellar Horizon API
pub fn get_latest_ledger() -> Result<u32> {
    let horizon_url = "https://horizon.stellar.org/ledgers?order=desc&limit=1";

    let response = reqwest::blocking::get(horizon_url)
        .context("Failed to fetch latest ledger from Horizon")?;

    let json: serde_json::Value = response.json()
        .context("Failed to parse Horizon response")?;

    let ledgers = json["_embedded"]["records"].as_array()
        .ok_or_else(|| anyhow::anyhow!("Unexpected Horizon response format"))?;

    let latest_ledger = ledgers.first()
        .ok_or_else(|| anyhow::anyhow!("No ledgers found in Horizon response"))?;

    let sequence = latest_ledger["sequence"].as_u64()
        .ok_or_else(|| anyhow::anyhow!("Could not parse ledger sequence"))?;

    Ok(sequence as u32)
}