databento_sandbox/
sandbox.rs

1use std::env;
2
3use databento::{
4    LiveClient,
5    dbn::{Dataset::GlbxMdp3, MboMsg, SType, Schema, TradeMsg},
6    live::Subscription,
7};
8use nautilus_core::consts::NAUTILUS_USER_AGENT;
9use time::OffsetDateTime;
10
11#[tokio::main]
12async fn main() {
13    let mut client = LiveClient::builder()
14        .user_agent_extension(NAUTILUS_USER_AGENT.into())
15        .key(env::var("DATABENTO_API_KEY").unwrap())
16        .unwrap()
17        .dataset(GlbxMdp3)
18        .build()
19        .await
20        .unwrap();
21
22    client
23        .subscribe(
24            Subscription::builder()
25                .schema(Schema::Mbo)
26                .stype_in(SType::RawSymbol)
27                .symbols("ESM4")
28                .start(OffsetDateTime::from_unix_timestamp_nanos(0).unwrap())
29                .build(),
30        )
31        .await
32        .unwrap();
33
34    client.start().await.unwrap();
35
36    let mut count = 0;
37
38    while let Some(record) = client.next_record().await.unwrap() {
39        if let Some(msg) = record.get::<TradeMsg>() {
40            println!("{msg:#?}");
41        }
42        if let Some(msg) = record.get::<MboMsg>() {
43            println!(
44                "Received delta: {} {} flags={}",
45                count,
46                msg.hd.ts_event,
47                msg.flags.raw(),
48            );
49            count += 1;
50        }
51    }
52}