pyth-hermes-client 0.6.1

Pyth Hermes client by AftermathFinance
Documentation
use clap::Parser;
use futures_util::{StreamExt as _, TryStreamExt as _};
use pyth_hermes_client::{EncodingType, PriceIdInput, PythClient};

#[derive(Parser)]
struct Args {
    #[arg(default_value = "0x50c67b3fd225db8912a424dd4baed60ffdde625ed2feaaf283724f9608fea266")]
    ids: Vec<PriceIdInput>,

    #[arg(long)]
    encoding: Option<EncodingType>,

    #[arg(long)]
    parsed: Option<bool>,

    #[arg(long)]
    allow_unordered: Option<bool>,

    #[arg(long)]
    benchmarks_only: Option<bool>,

    #[arg(long)]
    drop_after: Option<usize>,

    #[arg(long, default_value = "https://hermes-beta.pyth.network")]
    endpoint: url::Url,
}

#[tokio::main]
async fn main() -> color_eyre::Result<()> {
    color_eyre::install()?;

    let Args {
        ids,
        encoding,
        parsed,
        allow_unordered,
        benchmarks_only,
        drop_after,
        endpoint,
    } = Args::parse();

    let client = PythClient::new(endpoint);

    let mut stream = client
        .stream_price_updates(ids, encoding, parsed, allow_unordered, benchmarks_only)
        .await?
        .take(drop_after.unwrap_or(usize::MAX));

    while let Some(event) = stream.try_next().await? {
        let json = serde_json::to_value(event)?;
        println!("{json:#}");
    }
    Ok(())
}