#fetcher #xyz #finality #neardata

fastnear-neardata-fetcher

This crate provides a fetcher to retrieve data from neardata.xyz

7 releases (4 breaking)

new 0.30.0-rc.1 Apr 15, 2025
0.3.1 Apr 4, 2025
0.3.0 Mar 28, 2025
0.2.0 Mar 10, 2025
0.0.2 Jul 9, 2024

#66 in Magic Beans

Download history 2/week @ 2025-02-03 132/week @ 2025-02-17 20/week @ 2025-02-24 13/week @ 2025-03-03 141/week @ 2025-03-10 14/week @ 2025-03-17 136/week @ 2025-03-24 137/week @ 2025-03-31 30/week @ 2025-04-07

328 downloads per month
Used in inindexer

MIT/Apache

48KB
696 lines

fastnear-neardata-fetcher

This crate provides a fetcher to retrieve data from neardata.xyz

Handle ctrl-c signal to stop the fetcher.

pub fn running() -> Arc<AtomicBool> {
    let is_running = Arc::new(AtomicBool::new(true));
    let ctrl_c_running = is_running.clone();

    ctrlc::set_handler(move || {
        ctrl_c_running.store(false, Ordering::SeqCst);
        println!("Received Ctrl+C, starting shutdown...");
    })
        .expect("Error setting Ctrl+C handler");

    is_running
}

Configure the fetcher using FetcherConfigBuilder, e.g.

pub fn fetcher_config() -> fetcher::FetcherConfig {
    let mut fetcher_config_builder = fetcher::FetcherConfigBuilder::new()
        .num_threads(num_threads.parse::<u64>().unwrap())
        .chain_id(chain_id)
        .finality(finality);
    if !auth_bearer_token.is_empty() {
        fetcher_config_builder = fetcher_config_builder.auth_bearer_token(auth_bearer_token);
    }
    fetcher_config_builder.build()
}

Create a channel, and start a fetcher:

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let (sender, receiver) = mpsc::channel(100);
    tokio::spawn(fetcher::start_fetcher(fetcher_config(), sender, running()));

    listen_blocks(receiver).await;
}

See examples for more details.

Dependencies

~27–42MB
~658K SLoC