//! Inspect DBN Metadata //! //! Reads DBN file metadata to understand price encoding and schema details. use anyhow::Result; use dbn::decode::{DbnDecoder, DbnMetadata}; #[tokio::main] async fn main() -> Result<()> { println!("DBN Metadata Inspector"); println!("======================\n"); let file_path = "test_data/real/databento/ES.FUT_ohlcv-1m_2024-01-02.dbn"; // Create decoder let decoder = DbnDecoder::from_file(file_path)?; // Get metadata (DecodeDbn trait method) let metadata = decoder.metadata(); println!("📋 Metadata:"); println!(" Version: {:?}", metadata.version); println!(" Dataset: {}", metadata.dataset); println!(" Schema: {:?}", metadata.schema); println!(" Start: {}", metadata.start); println!(" End: {:?}", metadata.end); println!(" Limit: {:?}", metadata.limit); println!(" Stype In: {:?}", metadata.stype_in); println!(" Stype Out: {:?}", metadata.stype_out); println!(); println!("🔧 Symbol Mappings:"); for (i, symbol_map) in metadata.symbol_map().iter().enumerate() { println!(" [{}] {:?}", i, symbol_map); } // Check schema for price_exp field println!("💡 Schema Information:"); println!(" Schema: {:?}", metadata.schema); println!("\n Note: price_exp field may indicate decimal places for price conversion"); println!(" Common values:"); println!(" - price_exp = -9: divide by 1,000,000,000 (9 decimals)"); println!(" - price_exp = -7: divide by 10,000,000 (7 decimals)"); println!(" - price_exp = -2: divide by 100 (2 decimals, e.g., cents)"); Ok(()) }