diff --git a/data/src/providers/databento/mod.rs b/data/src/providers/databento/mod.rs index 664a13e50..f1afaa5cd 100644 --- a/data/src/providers/databento/mod.rs +++ b/data/src/providers/databento/mod.rs @@ -136,7 +136,6 @@ use crate::types::TimeRange; use async_trait::async_trait; use chrono::Utc; use common::{MarketDataEvent, QuoteEvent, Symbol, TradeEvent}; -use rust_decimal::Decimal; use std::pin::Pin; use std::sync::Arc; use tokio_stream::Stream; @@ -414,7 +413,10 @@ impl DatabentoHistoricalProvider { } /// Convert types::MarketDataEvent to providers::common::MarketDataEvent - fn convert_to_common_event(&self, event: MarketDataEvent) -> MarketDataEvent { + /// + /// Returns `None` for unsupported event types (e.g., Bar, OrderBook, News) + /// rather than synthesizing placeholder trades that would corrupt downstream analytics. + fn convert_to_common_event(&self, event: MarketDataEvent) -> Option { match event { MarketDataEvent::Trade(trade) => { let common_trade = TradeEvent { @@ -427,7 +429,7 @@ impl DatabentoHistoricalProvider { conditions: vec![], sequence: 0, }; - MarketDataEvent::Trade(common_trade) + Some(MarketDataEvent::Trade(common_trade)) }, MarketDataEvent::Quote(quote) => { let common_quote = QuoteEvent { @@ -443,22 +445,11 @@ impl DatabentoHistoricalProvider { conditions: vec![], sequence: 0, }; - MarketDataEvent::Quote(common_quote) + Some(MarketDataEvent::Quote(common_quote)) }, - // Add other event types as needed _ => { - // For unsupported event types, create a placeholder trade event - let placeholder_trade = TradeEvent { - symbol: "UNKNOWN".into(), - price: Decimal::ZERO, - size: Decimal::ZERO, - timestamp: Utc::now(), - trade_id: Some("placeholder".to_string()), - exchange: Some("UNKNOWN".to_string()), - conditions: vec![], - sequence: 0, - }; - MarketDataEvent::Trade(placeholder_trade) + debug!("Unsupported DBN record type encountered, skipping conversion"); + None }, } }