#![allow(deprecated)] #![allow(clippy::manual_non_exhaustive)]
mod methods;
use std::fmt::{self, Display, Formatter};
#[cfg(not(feature = "python"))]
use dbn_macros::MockPyo3;
use num_enum::{IntoPrimitive, TryFromPrimitive};
#[derive(
Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, TryFromPrimitive, IntoPrimitive,
)]
#[cfg_attr(
feature = "python",
derive(strum::EnumIter),
pyo3::pyclass(module = "databento_dbn")
)]
#[cfg_attr(not(feature = "python"), derive(MockPyo3))]
#[repr(u8)]
pub enum RType {
#[pyo3(name = "MBP_0")]
Mbp0 = 0x00,
#[pyo3(name = "MBP_1")]
Mbp1 = 0x01,
#[pyo3(name = "MBP_10")]
Mbp10 = 0x0A,
#[deprecated(
since = "0.3.3",
note = "Separated into separate rtypes for each OHLCV schema."
)]
#[pyo3(name = "OHLCV_DEPRECATED")]
OhlcvDeprecated = 0x11,
#[pyo3(name = "OHLCV_1S")]
Ohlcv1S = 0x20,
#[pyo3(name = "OHLCV_1M")]
Ohlcv1M = 0x21,
#[pyo3(name = "OHLCV_1H")]
Ohlcv1H = 0x22,
#[pyo3(name = "OHLCV_1D")]
Ohlcv1D = 0x23,
#[pyo3(name = "OHLCV_EOD")]
OhlcvEod = 0x24,
#[pyo3(name = "STATUS")]
Status = 0x12,
#[pyo3(name = "INSTRUMENT_DEF")]
InstrumentDef = 0x13,
#[pyo3(name = "IMBALANCE")]
Imbalance = 0x14,
#[pyo3(name = "ERROR")]
Error = 0x15,
#[pyo3(name = "SYMBOL_MAPPING")]
SymbolMapping = 0x16,
#[pyo3(name = "SYSTEM")]
System = 0x17,
#[pyo3(name = "STATISTICS")]
Statistics = 0x18,
#[pyo3(name = "MBO")]
Mbo = 0xA0,
#[pyo3(name = "CMBP_1")]
Cmbp1 = 0xB1,
#[pyo3(name = "CBBO_1S")]
Cbbo1S = 0xC0,
#[pyo3(name = "CBBO_1M")]
Cbbo1M = 0xC1,
#[pyo3(name = "TCBBO")]
Tcbbo = 0xC2,
#[pyo3(name = "BBO_1S")]
Bbo1S = 0xC3,
#[pyo3(name = "BBO_1M")]
Bbo1M = 0xC4,
}
pub mod rtype {
use super::*;
pub const MBP_0: u8 = RType::Mbp0 as u8;
pub const MBP_1: u8 = RType::Mbp1 as u8;
pub const MBP_10: u8 = RType::Mbp10 as u8;
pub const OHLCV_DEPRECATED: u8 = RType::OhlcvDeprecated as u8;
pub const OHLCV_1S: u8 = RType::Ohlcv1S as u8;
pub const OHLCV_1M: u8 = RType::Ohlcv1M as u8;
pub const OHLCV_1H: u8 = RType::Ohlcv1H as u8;
pub const OHLCV_1D: u8 = RType::Ohlcv1D as u8;
pub const OHLCV_EOD: u8 = RType::OhlcvEod as u8;
pub const STATUS: u8 = RType::Status as u8;
pub const INSTRUMENT_DEF: u8 = RType::InstrumentDef as u8;
pub const IMBALANCE: u8 = RType::Imbalance as u8;
pub const ERROR: u8 = RType::Error as u8;
pub const SYMBOL_MAPPING: u8 = RType::SymbolMapping as u8;
pub const SYSTEM: u8 = RType::System as u8;
pub const STATISTICS: u8 = RType::Statistics as u8;
pub const MBO: u8 = RType::Mbo as u8;
pub const CMBP_1: u8 = RType::Cmbp1 as u8;
pub const CBBO_1S: u8 = RType::Cbbo1S as u8;
pub const CBBO_1M: u8 = RType::Cbbo1M as u8;
pub const TCBBO: u8 = RType::Tcbbo as u8;
pub const BBO_1S: u8 = RType::Bbo1S as u8;
pub const BBO_1M: u8 = RType::Bbo1M as u8;
}
impl std::str::FromStr for RType {
type Err = crate::Error;
fn from_str(s: &str) -> Result<Self, Self::Err> {
match s {
"mbp-0" => Ok(Self::Mbp0),
"mbp-1" => Ok(Self::Mbp1),
"mbp-10" => Ok(Self::Mbp10),
#[allow(deprecated)]
"ohlcv-deprecated" => Ok(Self::OhlcvDeprecated),
"ohlcv-1s" => Ok(Self::Ohlcv1S),
"ohlcv-1m" => Ok(Self::Ohlcv1M),
"ohlcv-1h" => Ok(Self::Ohlcv1H),
"ohlcv-1d" => Ok(Self::Ohlcv1D),
"ohlcv-eod" => Ok(Self::OhlcvEod),
"status" => Ok(Self::Status),
"instrument-def" => Ok(Self::InstrumentDef),
"imbalance" => Ok(Self::Imbalance),
"error" => Ok(Self::Error),
"symbol-mapping" => Ok(Self::SymbolMapping),
"system" => Ok(Self::System),
"statistics" => Ok(Self::Statistics),
"mbo" => Ok(Self::Mbo),
"cmbp-1" => Ok(Self::Cmbp1),
"cbbo-1s" => Ok(Self::Cbbo1S),
"cbbo-1m" => Ok(Self::Cbbo1M),
"tcbbo" => Ok(Self::Tcbbo),
"bbo-1s" => Ok(Self::Bbo1S),
"bbo-1m" => Ok(Self::Bbo1M),
_ => Err(crate::Error::conversion::<Self>(s.to_owned())),
}
}
}
impl AsRef<str> for RType {
fn as_ref(&self) -> &str {
self.as_str()
}
}
impl RType {
pub const fn as_str(&self) -> &'static str {
match self {
Self::Mbp0 => "mbp-0",
Self::Mbp1 => "mbp-1",
Self::Mbp10 => "mbp-10",
#[allow(deprecated)]
Self::OhlcvDeprecated => "ohlcv-deprecated",
Self::Ohlcv1S => "ohlcv-1s",
Self::Ohlcv1M => "ohlcv-1m",
Self::Ohlcv1H => "ohlcv-1h",
Self::Ohlcv1D => "ohlcv-1d",
Self::OhlcvEod => "ohlcv-eod",
Self::Status => "status",
Self::InstrumentDef => "instrument-def",
Self::Imbalance => "imbalance",
Self::Error => "error",
Self::SymbolMapping => "symbol-mapping",
Self::System => "system",
Self::Statistics => "statistics",
Self::Mbo => "mbo",
Self::Cmbp1 => "cmbp-1",
Self::Cbbo1S => "cbbo-1s",
Self::Cbbo1M => "cbbo-1m",
Self::Tcbbo => "tcbbo",
Self::Bbo1S => "bbo-1s",
Self::Bbo1M => "bbo-1m",
}
}
}
impl Display for RType {
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
f.write_str(self.as_str())
}
}
#[derive(
Debug,
Clone,
Copy,
Default,
PartialEq,
Eq,
PartialOrd,
Ord,
Hash,
TryFromPrimitive,
IntoPrimitive,
)]
#[cfg_attr(
feature = "python",
derive(strum::EnumIter),
pyo3::pyclass(module = "databento_dbn")
)]
#[cfg_attr(not(feature = "python"), derive(MockPyo3))]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[repr(u8)]
pub enum Side {
#[pyo3(name = "ASK")]
Ask = b'A',
#[pyo3(name = "BID")]
Bid = b'B',
#[default]
#[pyo3(name = "NONE")]
None = b'N',
}
impl From<Side> for char {
fn from(value: Side) -> Self {
u8::from(value) as char
}
}
#[derive(
Debug,
Clone,
Copy,
Default,
PartialEq,
Eq,
PartialOrd,
Ord,
Hash,
TryFromPrimitive,
IntoPrimitive,
)]
#[cfg_attr(
feature = "python",
derive(strum::EnumIter),
pyo3::pyclass(module = "databento_dbn")
)]
#[cfg_attr(not(feature = "python"), derive(MockPyo3))]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[repr(u8)]
pub enum Action {
#[pyo3(name = "MODIFY")]
Modify = b'M',
#[pyo3(name = "TRADE")]
Trade = b'T',
#[pyo3(name = "FILL")]
Fill = b'F',
#[pyo3(name = "CANCEL")]
Cancel = b'C',
#[pyo3(name = "ADD")]
Add = b'A',
#[pyo3(name = "CLEAR")]
Clear = b'R',
#[default]
#[pyo3(name = "NONE")]
None = b'N',
}
impl From<Action> for char {
fn from(value: Action) -> Self {
u8::from(value) as char
}
}
#[derive(
Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, TryFromPrimitive, IntoPrimitive,
)]
#[cfg_attr(
feature = "python",
derive(strum::EnumIter),
pyo3::pyclass(module = "databento_dbn")
)]
#[cfg_attr(not(feature = "python"), derive(MockPyo3))]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[non_exhaustive]
#[repr(u8)]
pub enum InstrumentClass {
#[pyo3(name = "BOND")]
Bond = b'B',
#[pyo3(name = "CALL")]
Call = b'C',
#[pyo3(name = "FUTURE")]
Future = b'F',
#[pyo3(name = "STOCK")]
Stock = b'K',
#[pyo3(name = "MIXED_SPREAD")]
MixedSpread = b'M',
#[pyo3(name = "PUT")]
Put = b'P',
#[pyo3(name = "FUTURE_SPREAD")]
FutureSpread = b'S',
#[pyo3(name = "OPTION_SPREAD")]
OptionSpread = b'T',
#[pyo3(name = "FX_SPOT")]
FxSpot = b'X',
#[pyo3(name = "COMMODITY_SPOT")]
CommoditySpot = b'Y',
}
impl From<InstrumentClass> for char {
fn from(value: InstrumentClass) -> Self {
u8::from(value) as char
}
}
#[derive(
Debug,
Clone,
Copy,
Default,
PartialEq,
Eq,
PartialOrd,
Ord,
Hash,
TryFromPrimitive,
IntoPrimitive,
)]
#[cfg_attr(
feature = "python",
derive(strum::EnumIter),
pyo3::pyclass(module = "databento_dbn")
)]
#[cfg_attr(not(feature = "python"), derive(MockPyo3))]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[repr(u8)]
pub enum MatchAlgorithm {
#[default]
#[pyo3(name = "UNDEFINED")]
Undefined = b' ',
#[pyo3(name = "FIFO")]
Fifo = b'F',
#[pyo3(name = "CONFIGURABLE")]
Configurable = b'K',
#[pyo3(name = "PRO_RATA")]
ProRata = b'C',
#[pyo3(name = "FIFO_LMM")]
FifoLmm = b'T',
#[pyo3(name = "THRESHOLD_PRO_RATA")]
ThresholdProRata = b'O',
#[pyo3(name = "FIFO_TOP_LMM")]
FifoTopLmm = b'S',
#[pyo3(name = "THRESHOLD_PRO_RATA_LMM")]
ThresholdProRataLmm = b'Q',
#[pyo3(name = "EURODOLLAR_FUTURES")]
EurodollarFutures = b'Y',
#[pyo3(name = "TIME_PRO_RATA")]
TimeProRata = b'P',
#[pyo3(name = "INSTITUTIONAL_PRIORITIZATION")]
InstitutionalPrioritization = b'V',
}
impl From<MatchAlgorithm> for char {
fn from(value: MatchAlgorithm) -> Self {
u8::from(value) as char
}
}
#[derive(
Debug,
Clone,
Copy,
Default,
PartialEq,
Eq,
PartialOrd,
Ord,
Hash,
TryFromPrimitive,
IntoPrimitive,
)]
#[cfg_attr(
feature = "python",
derive(strum::EnumIter),
pyo3::pyclass(module = "databento_dbn")
)]
#[cfg_attr(not(feature = "python"), derive(MockPyo3))]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[repr(u8)]
pub enum UserDefinedInstrument {
#[default]
#[pyo3(name = "NO")]
No = b'N',
#[pyo3(name = "YES")]
Yes = b'Y',
}
impl From<UserDefinedInstrument> for char {
fn from(value: UserDefinedInstrument) -> Self {
u8::from(value) as char
}
}
#[derive(
Debug,
Clone,
Copy,
Default,
PartialEq,
Eq,
PartialOrd,
Ord,
Hash,
TryFromPrimitive,
IntoPrimitive,
)]
#[cfg_attr(
feature = "python",
derive(strum::EnumIter),
pyo3::pyclass(module = "databento_dbn")
)]
#[cfg_attr(not(feature = "python"), derive(MockPyo3))]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[repr(u8)]
pub enum SecurityUpdateAction {
#[default]
#[pyo3(name = "ADD")]
Add = b'A',
#[pyo3(name = "MODIFY")]
Modify = b'M',
#[pyo3(name = "DELETE")]
Delete = b'D',
#[doc(hidden)]
#[deprecated(since = "0.3.0", note = "Still present in legacy files.")]
#[pyo3(name = "INVALID")]
Invalid = b'~',
}
impl From<SecurityUpdateAction> for char {
fn from(value: SecurityUpdateAction) -> Self {
u8::from(value) as char
}
}
#[derive(
Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, TryFromPrimitive, IntoPrimitive,
)]
#[cfg_attr(
feature = "python",
derive(strum::EnumIter),
pyo3::pyclass(module = "databento_dbn")
)]
#[cfg_attr(not(feature = "python"), derive(MockPyo3))]
#[repr(u8)]
pub enum SType {
#[pyo3(name = "INSTRUMENT_ID")]
InstrumentId = 0,
#[pyo3(name = "RAW_SYMBOL")]
RawSymbol = 1,
#[deprecated(since = "0.5.0", note = "Smart was split into continuous and parent.")]
#[pyo3(name = "SMART")]
Smart = 2,
#[pyo3(name = "CONTINUOUS")]
Continuous = 3,
#[pyo3(name = "PARENT")]
Parent = 4,
#[pyo3(name = "NASDAQ_SYMBOL")]
NasdaqSymbol = 5,
#[pyo3(name = "CMS_SYMBOL")]
CmsSymbol = 6,
#[pyo3(name = "ISIN")]
Isin = 7,
#[pyo3(name = "US_CODE")]
UsCode = 8,
#[pyo3(name = "BBG_COMP_ID")]
BbgCompId = 9,
#[pyo3(name = "BBG_COMP_TICKER")]
BbgCompTicker = 10,
#[pyo3(name = "FIGI")]
Figi = 11,
#[pyo3(name = "FIGI_TICKER")]
FigiTicker = 12,
}
impl std::str::FromStr for SType {
type Err = crate::Error;
fn from_str(s: &str) -> Result<Self, Self::Err> {
match s {
"instrument_id" | "product_id" => Ok(Self::InstrumentId),
"raw_symbol" | "native" => Ok(Self::RawSymbol),
#[allow(deprecated)]
"smart" => Ok(Self::Smart),
"continuous" => Ok(Self::Continuous),
"parent" => Ok(Self::Parent),
"nasdaq_symbol" | "nasdaq" => Ok(Self::NasdaqSymbol),
"cms_symbol" | "cms" => Ok(Self::CmsSymbol),
"isin" => Ok(Self::Isin),
"us_code" => Ok(Self::UsCode),
"bbg_comp_id" => Ok(Self::BbgCompId),
"bbg_comp_ticker" => Ok(Self::BbgCompTicker),
"figi" => Ok(Self::Figi),
"figi_ticker" => Ok(Self::FigiTicker),
_ => Err(crate::Error::conversion::<Self>(s.to_owned())),
}
}
}
impl AsRef<str> for SType {
fn as_ref(&self) -> &str {
self.as_str()
}
}
impl SType {
pub const fn as_str(&self) -> &'static str {
match self {
Self::InstrumentId => "instrument_id",
Self::RawSymbol => "raw_symbol",
#[allow(deprecated)]
Self::Smart => "smart",
Self::Continuous => "continuous",
Self::Parent => "parent",
Self::NasdaqSymbol => "nasdaq_symbol",
Self::CmsSymbol => "cms_symbol",
Self::Isin => "isin",
Self::UsCode => "us_code",
Self::BbgCompId => "bbg_comp_id",
Self::BbgCompTicker => "bbg_comp_ticker",
Self::Figi => "figi",
Self::FigiTicker => "figi_ticker",
}
}
}
impl Display for SType {
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
f.write_str(self.as_str())
}
}
#[derive(
Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, TryFromPrimitive, IntoPrimitive,
)]
#[cfg_attr(
feature = "python",
derive(strum::EnumIter),
pyo3::pyclass(module = "databento_dbn")
)]
#[cfg_attr(not(feature = "python"), derive(MockPyo3))]
#[repr(u16)]
pub enum Schema {
#[pyo3(name = "MBO")]
Mbo = 0,
#[pyo3(name = "MBP_1")]
Mbp1 = 1,
#[pyo3(name = "MBP_10")]
Mbp10 = 2,
#[pyo3(name = "TBBO")]
Tbbo = 3,
#[pyo3(name = "TRADES")]
Trades = 4,
#[pyo3(name = "OHLCV_1S")]
Ohlcv1S = 5,
#[pyo3(name = "OHLCV_1M")]
Ohlcv1M = 6,
#[pyo3(name = "OHLCV_1H")]
Ohlcv1H = 7,
#[pyo3(name = "OHLCV_1D")]
Ohlcv1D = 8,
#[pyo3(name = "DEFINITION")]
Definition = 9,
#[pyo3(name = "STATISTICS")]
Statistics = 10,
#[pyo3(name = "STATUS")]
Status = 11,
#[pyo3(name = "IMBALANCE")]
Imbalance = 12,
#[pyo3(name = "OHLCV_EOD")]
OhlcvEod = 13,
#[pyo3(name = "CMBP_1")]
Cmbp1 = 14,
#[pyo3(name = "CBBO_1S")]
Cbbo1S = 15,
#[pyo3(name = "CBBO_1M")]
Cbbo1M = 16,
#[pyo3(name = "TCBBO")]
Tcbbo = 17,
#[pyo3(name = "BBO_1S")]
Bbo1S = 18,
#[pyo3(name = "BBO_1M")]
Bbo1M = 19,
}
impl std::str::FromStr for Schema {
type Err = crate::Error;
fn from_str(s: &str) -> Result<Self, Self::Err> {
match s {
"mbo" => Ok(Self::Mbo),
"mbp-1" => Ok(Self::Mbp1),
"mbp-10" => Ok(Self::Mbp10),
"tbbo" => Ok(Self::Tbbo),
"trades" => Ok(Self::Trades),
"ohlcv-1s" => Ok(Self::Ohlcv1S),
"ohlcv-1m" => Ok(Self::Ohlcv1M),
"ohlcv-1h" => Ok(Self::Ohlcv1H),
"ohlcv-1d" => Ok(Self::Ohlcv1D),
"definition" => Ok(Self::Definition),
"statistics" => Ok(Self::Statistics),
"status" => Ok(Self::Status),
"imbalance" => Ok(Self::Imbalance),
"ohlcv-eod" => Ok(Self::OhlcvEod),
"cmbp-1" => Ok(Self::Cmbp1),
"cbbo-1s" => Ok(Self::Cbbo1S),
"cbbo-1m" => Ok(Self::Cbbo1M),
"tcbbo" => Ok(Self::Tcbbo),
"bbo-1s" => Ok(Self::Bbo1S),
"bbo-1m" => Ok(Self::Bbo1M),
_ => Err(crate::Error::conversion::<Self>(s.to_owned())),
}
}
}
impl AsRef<str> for Schema {
fn as_ref(&self) -> &str {
self.as_str()
}
}
impl Schema {
pub const fn as_str(&self) -> &'static str {
match self {
Self::Mbo => "mbo",
Self::Mbp1 => "mbp-1",
Self::Mbp10 => "mbp-10",
Self::Tbbo => "tbbo",
Self::Trades => "trades",
Self::Ohlcv1S => "ohlcv-1s",
Self::Ohlcv1M => "ohlcv-1m",
Self::Ohlcv1H => "ohlcv-1h",
Self::Ohlcv1D => "ohlcv-1d",
Self::Definition => "definition",
Self::Statistics => "statistics",
Self::Status => "status",
Self::Imbalance => "imbalance",
Self::OhlcvEod => "ohlcv-eod",
Self::Cmbp1 => "cmbp-1",
Self::Cbbo1S => "cbbo-1s",
Self::Cbbo1M => "cbbo-1m",
Self::Tcbbo => "tcbbo",
Self::Bbo1S => "bbo-1s",
Self::Bbo1M => "bbo-1m",
}
}
pub const COUNT: usize = 20;
}
impl Display for Schema {
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
f.write_str(self.as_str())
}
}
#[derive(
Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, TryFromPrimitive, IntoPrimitive,
)]
#[cfg_attr(
feature = "python",
derive(strum::EnumIter),
pyo3::pyclass(module = "databento_dbn")
)]
#[cfg_attr(not(feature = "python"), derive(MockPyo3))]
#[repr(u8)]
pub enum Encoding {
#[pyo3(name = "DBN")]
Dbn = 0,
#[pyo3(name = "CSV")]
Csv = 1,
#[pyo3(name = "JSON")]
Json = 2,
}
impl std::str::FromStr for Encoding {
type Err = crate::Error;
fn from_str(s: &str) -> Result<Self, Self::Err> {
match s {
"dbn" | "dbz" => Ok(Self::Dbn),
"csv" => Ok(Self::Csv),
"json" => Ok(Self::Json),
_ => Err(crate::Error::conversion::<Self>(s.to_owned())),
}
}
}
impl AsRef<str> for Encoding {
fn as_ref(&self) -> &str {
self.as_str()
}
}
impl Encoding {
pub const fn as_str(&self) -> &'static str {
match self {
Self::Dbn => "dbn",
Self::Csv => "csv",
Self::Json => "json",
}
}
}
impl Display for Encoding {
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
f.write_str(self.as_str())
}
}
#[derive(
Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, TryFromPrimitive, IntoPrimitive,
)]
#[cfg_attr(
feature = "python",
derive(strum::EnumIter),
pyo3::pyclass(module = "databento_dbn")
)]
#[cfg_attr(not(feature = "python"), derive(MockPyo3))]
#[repr(u8)]
pub enum Compression {
#[pyo3(name = "NONE")]
None = 0,
#[pyo3(name = "ZSTD")]
Zstd = 1,
}
impl std::str::FromStr for Compression {
type Err = crate::Error;
fn from_str(s: &str) -> Result<Self, Self::Err> {
match s {
"none" => Ok(Self::None),
"zstd" => Ok(Self::Zstd),
_ => Err(crate::Error::conversion::<Self>(s.to_owned())),
}
}
}
impl AsRef<str> for Compression {
fn as_ref(&self) -> &str {
self.as_str()
}
}
impl Compression {
pub const fn as_str(&self) -> &'static str {
match self {
Self::None => "none",
Self::Zstd => "zstd",
}
}
}
impl Display for Compression {
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
f.write_str(self.as_str())
}
}
#[derive(
Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, TryFromPrimitive, IntoPrimitive,
)]
#[cfg_attr(
feature = "python",
derive(strum::EnumIter),
pyo3::pyclass(module = "databento_dbn")
)]
#[cfg_attr(not(feature = "python"), derive(MockPyo3))]
#[non_exhaustive]
#[repr(u16)]
pub enum StatType {
#[pyo3(name = "OPENING_PRICE")]
OpeningPrice = 1,
#[pyo3(name = "INDICATIVE_OPENING_PRICE")]
IndicativeOpeningPrice = 2,
#[pyo3(name = "SETTLEMENT_PRICE")]
SettlementPrice = 3,
#[pyo3(name = "TRADING_SESSION_LOW_PRICE")]
TradingSessionLowPrice = 4,
#[pyo3(name = "TRADING_SESSION_HIGH_PRICE")]
TradingSessionHighPrice = 5,
#[pyo3(name = "CLEARED_VOLUME")]
ClearedVolume = 6,
#[pyo3(name = "LOWEST_OFFER")]
LowestOffer = 7,
#[pyo3(name = "HIGHEST_BID")]
HighestBid = 8,
#[pyo3(name = "OPEN_INTEREST")]
OpenInterest = 9,
#[pyo3(name = "FIXING_PRICE")]
FixingPrice = 10,
#[pyo3(name = "CLOSE_PRICE")]
ClosePrice = 11,
#[pyo3(name = "NET_CHANGE")]
NetChange = 12,
#[pyo3(name = "VWAP")]
Vwap = 13,
#[pyo3(name = "VOLATILITY")]
Volatility = 14,
#[pyo3(name = "DELTA")]
Delta = 15,
#[pyo3(name = "UNCROSSING_PRICE")]
UncrossingPrice = 16,
#[pyo3(name = "UPPER_PRICE_LIMIT")]
UpperPriceLimit = 17,
#[pyo3(name = "LOWER_PRICE_LIMIT")]
LowerPriceLimit = 18,
#[pyo3(name = "BLOCK_VOLUME")]
BlockVolume = 19,
#[pyo3(name = "VENUE_SPECIFIC_VOLUME_1")]
VenueSpecificVolume1 = 10001,
}
#[derive(
Debug,
Clone,
Copy,
Default,
PartialEq,
Eq,
PartialOrd,
Ord,
Hash,
TryFromPrimitive,
IntoPrimitive,
)]
#[cfg_attr(
feature = "python",
derive(strum::EnumIter),
pyo3::pyclass(module = "databento_dbn")
)]
#[cfg_attr(not(feature = "python"), derive(MockPyo3))]
#[non_exhaustive]
#[repr(u8)]
pub enum StatUpdateAction {
#[default]
#[pyo3(name = "NEW")]
New = 1,
#[pyo3(name = "DELETE")]
Delete = 2,
}
#[derive(
Debug,
Clone,
Copy,
Default,
PartialEq,
Eq,
PartialOrd,
Ord,
Hash,
TryFromPrimitive,
IntoPrimitive,
)]
#[cfg_attr(
feature = "python",
derive(strum::EnumIter),
pyo3::pyclass(module = "databento_dbn")
)]
#[cfg_attr(not(feature = "python"), derive(MockPyo3))]
#[non_exhaustive]
#[repr(u16)]
pub enum StatusAction {
#[default]
#[pyo3(name = "NONE")]
None = 0,
#[pyo3(name = "PRE_OPEN")]
PreOpen = 1,
#[pyo3(name = "PRE_CROSS")]
PreCross = 2,
#[pyo3(name = "QUOTING")]
Quoting = 3,
#[pyo3(name = "CROSS")]
Cross = 4,
#[pyo3(name = "ROTATION")]
Rotation = 5,
#[pyo3(name = "NEW_PRICE_INDICATION")]
NewPriceIndication = 6,
#[pyo3(name = "TRADING")]
Trading = 7,
#[pyo3(name = "HALT")]
Halt = 8,
#[pyo3(name = "PAUSE")]
Pause = 9,
#[pyo3(name = "SUSPEND")]
Suspend = 10,
#[pyo3(name = "PRE_CLOSE")]
PreClose = 11,
#[pyo3(name = "CLOSE")]
Close = 12,
#[pyo3(name = "POST_CLOSE")]
PostClose = 13,
#[pyo3(name = "SSR_CHANGE")]
SsrChange = 14,
#[pyo3(name = "NOT_AVAILABLE_FOR_TRADING")]
NotAvailableForTrading = 15,
}
#[derive(
Debug,
Clone,
Copy,
Default,
PartialEq,
Eq,
PartialOrd,
Ord,
Hash,
TryFromPrimitive,
IntoPrimitive,
)]
#[cfg_attr(
feature = "python",
derive(strum::EnumIter),
pyo3::pyclass(module = "databento_dbn")
)]
#[cfg_attr(not(feature = "python"), derive(MockPyo3))]
#[non_exhaustive]
#[repr(u16)]
pub enum StatusReason {
#[default]
#[pyo3(name = "NONE")]
None = 0,
#[pyo3(name = "SCHEDULED")]
Scheduled = 1,
#[pyo3(name = "SURVEILLANCE_INTERVENTION")]
SurveillanceIntervention = 2,
#[pyo3(name = "MARKET_EVENT")]
MarketEvent = 3,
#[pyo3(name = "INSTRUMENT_ACTIVATION")]
InstrumentActivation = 4,
#[pyo3(name = "INSTRUMENT_EXPIRATION")]
InstrumentExpiration = 5,
#[pyo3(name = "RECOVERY_IN_PROCESS")]
RecoveryInProcess = 6,
#[pyo3(name = "REGULATORY")]
Regulatory = 10,
#[pyo3(name = "ADMINISTRATIVE")]
Administrative = 11,
#[pyo3(name = "NON_COMPLIANCE")]
NonCompliance = 12,
#[pyo3(name = "FILINGS_NOT_CURRENT")]
FilingsNotCurrent = 13,
#[pyo3(name = "SEC_TRADING_SUSPENSION")]
SecTradingSuspension = 14,
#[pyo3(name = "NEW_ISSUE")]
NewIssue = 15,
#[pyo3(name = "ISSUE_AVAILABLE")]
IssueAvailable = 16,
#[pyo3(name = "ISSUES_REVIEWED")]
IssuesReviewed = 17,
#[pyo3(name = "FILING_REQS_SATISFIED")]
FilingReqsSatisfied = 18,
#[pyo3(name = "NEWS_PENDING")]
NewsPending = 30,
#[pyo3(name = "NEWS_RELEASED")]
NewsReleased = 31,
#[pyo3(name = "NEWS_AND_RESUMPTION_TIMES")]
NewsAndResumptionTimes = 32,
#[pyo3(name = "NEWS_NOT_FORTHCOMING")]
NewsNotForthcoming = 33,
#[pyo3(name = "ORDER_IMBALANCE")]
OrderImbalance = 40,
#[pyo3(name = "LULD_PAUSE")]
LuldPause = 50,
#[pyo3(name = "OPERATIONAL")]
Operational = 60,
#[pyo3(name = "ADDITIONAL_INFORMATION_REQUESTED")]
AdditionalInformationRequested = 70,
#[pyo3(name = "MERGER_EFFECTIVE")]
MergerEffective = 80,
#[pyo3(name = "ETF")]
Etf = 90,
#[pyo3(name = "CORPORATE_ACTION")]
CorporateAction = 100,
#[pyo3(name = "NEW_SECURITY_OFFERING")]
NewSecurityOffering = 110,
#[pyo3(name = "MARKET_WIDE_HALT_LEVEL1")]
MarketWideHaltLevel1 = 120,
#[pyo3(name = "MARKET_WIDE_HALT_LEVEL2")]
MarketWideHaltLevel2 = 121,
#[pyo3(name = "MARKET_WIDE_HALT_LEVEL3")]
MarketWideHaltLevel3 = 122,
#[pyo3(name = "MARKET_WIDE_HALT_CARRYOVER")]
MarketWideHaltCarryover = 123,
#[pyo3(name = "MARKET_WIDE_HALT_RESUMPTION")]
MarketWideHaltResumption = 124,
#[pyo3(name = "QUOTATION_NOT_AVAILABLE")]
QuotationNotAvailable = 130,
}
#[derive(
Debug,
Clone,
Copy,
Default,
PartialEq,
Eq,
PartialOrd,
Ord,
Hash,
TryFromPrimitive,
IntoPrimitive,
)]
#[cfg_attr(
feature = "python",
derive(strum::EnumIter),
pyo3::pyclass(module = "databento_dbn")
)]
#[cfg_attr(not(feature = "python"), derive(MockPyo3))]
#[non_exhaustive]
#[repr(u16)]
pub enum TradingEvent {
#[default]
#[pyo3(name = "NONE")]
None = 0,
#[pyo3(name = "NO_CANCEL")]
NoCancel = 1,
#[pyo3(name = "CHANGE_TRADING_SESSION")]
ChangeTradingSession = 2,
#[pyo3(name = "IMPLIED_MATCHING_ON")]
ImpliedMatchingOn = 3,
#[pyo3(name = "IMPLIED_MATCHING_OFF")]
ImpliedMatchingOff = 4,
}
#[derive(
Debug,
Clone,
Copy,
Default,
PartialEq,
Eq,
PartialOrd,
Ord,
Hash,
TryFromPrimitive,
IntoPrimitive,
)]
#[cfg_attr(
feature = "python",
derive(strum::EnumIter),
pyo3::pyclass(module = "databento_dbn")
)]
#[cfg_attr(not(feature = "python"), derive(MockPyo3))]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[repr(u8)]
pub enum TriState {
#[default]
#[pyo3(name = "NOT_AVAILABLE")]
NotAvailable = b'~',
#[pyo3(name = "NO")]
No = b'N',
#[pyo3(name = "YES")]
Yes = b'Y',
}
impl From<TriState> for char {
fn from(value: TriState) -> Self {
u8::from(value) as char
}
}
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, PartialOrd, Ord, Hash)]
#[cfg_attr(
feature = "python",
derive(strum::EnumIter),
pyo3::pyclass(module = "databento_dbn")
)]
#[cfg_attr(not(feature = "python"), derive(MockPyo3))]
pub enum VersionUpgradePolicy {
#[pyo3(name = "AS_IS")]
AsIs,
#[pyo3(name = "UPGRADE_TO_V2")]
UpgradeToV2,
#[default]
#[pyo3(name = "UPGRADE_TO_V3")]
UpgradeToV3,
}
#[derive(
Debug,
Clone,
Copy,
Default,
PartialEq,
Eq,
PartialOrd,
Ord,
Hash,
TryFromPrimitive,
IntoPrimitive,
)]
#[cfg_attr(
feature = "python",
derive(strum::EnumIter),
pyo3::pyclass(module = "databento_dbn")
)]
#[cfg_attr(not(feature = "python"), derive(MockPyo3))]
#[non_exhaustive]
#[repr(u8)]
pub enum ErrorCode {
#[pyo3(name = "AUTH_FAILED")]
AuthFailed = 1,
#[pyo3(name = "API_KEY_DEACTIVATED")]
ApiKeyDeactivated = 2,
#[pyo3(name = "CONNECTION_LIMIT_EXCEEDED")]
ConnectionLimitExceeded = 3,
#[pyo3(name = "SYMBOL_RESOLUTION_FAILED")]
SymbolResolutionFailed = 4,
#[pyo3(name = "INVALID_SUBSCRIPTION")]
InvalidSubscription = 5,
#[pyo3(name = "INTERNAL_ERROR")]
InternalError = 6,
#[pyo3(name = "SKIPPED_RECORDS_AFTER_SLOW_READING")]
SkippedRecordsAfterSlowReading = 7,
#[default]
#[pyo3(name = "UNSET")]
Unset = 255,
}
impl std::str::FromStr for ErrorCode {
type Err = crate::Error;
fn from_str(s: &str) -> Result<Self, Self::Err> {
match s {
"auth_failed" => Ok(Self::AuthFailed),
"api_key_deactivated" => Ok(Self::ApiKeyDeactivated),
"connection_limit_exceeded" => Ok(Self::ConnectionLimitExceeded),
"symbol_resolution_failed" => Ok(Self::SymbolResolutionFailed),
"invalid_subscription" => Ok(Self::InvalidSubscription),
"internal_error" => Ok(Self::InternalError),
"skipped_records_after_slow_reading" => Ok(Self::SkippedRecordsAfterSlowReading),
"unset" => Ok(Self::Unset),
_ => Err(crate::Error::conversion::<Self>(s.to_owned())),
}
}
}
impl AsRef<str> for ErrorCode {
fn as_ref(&self) -> &str {
self.as_str()
}
}
impl ErrorCode {
pub const fn as_str(&self) -> &'static str {
match self {
Self::AuthFailed => "auth_failed",
Self::ApiKeyDeactivated => "api_key_deactivated",
Self::ConnectionLimitExceeded => "connection_limit_exceeded",
Self::SymbolResolutionFailed => "symbol_resolution_failed",
Self::InvalidSubscription => "invalid_subscription",
Self::InternalError => "internal_error",
Self::SkippedRecordsAfterSlowReading => "skipped_records_after_slow_reading",
Self::Unset => "unset",
}
}
}
impl Display for ErrorCode {
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
f.write_str(self.as_str())
}
}
#[derive(
Debug,
Clone,
Copy,
Default,
PartialEq,
Eq,
PartialOrd,
Ord,
Hash,
TryFromPrimitive,
IntoPrimitive,
)]
#[cfg_attr(
feature = "python",
derive(strum::EnumIter),
pyo3::pyclass(module = "databento_dbn")
)]
#[cfg_attr(not(feature = "python"), derive(MockPyo3))]
#[non_exhaustive]
#[repr(u8)]
pub enum SystemCode {
#[pyo3(name = "HEARTBEAT")]
Heartbeat = 0,
#[pyo3(name = "SUBSCRIPTION_ACK")]
SubscriptionAck = 1,
#[pyo3(name = "SLOW_READER_WARNING")]
SlowReaderWarning = 2,
#[pyo3(name = "REPLAY_COMPLETED")]
ReplayCompleted = 3,
#[pyo3(name = "END_OF_INTERVAL")]
EndOfInterval = 4,
#[default]
#[pyo3(name = "UNSET")]
Unset = 255,
}
impl std::str::FromStr for SystemCode {
type Err = crate::Error;
fn from_str(s: &str) -> Result<Self, Self::Err> {
match s {
"heartbeat" => Ok(Self::Heartbeat),
"subscription_ack" => Ok(Self::SubscriptionAck),
"slow_reader_warning" => Ok(Self::SlowReaderWarning),
"replay_completed" => Ok(Self::ReplayCompleted),
"end_of_interval" => Ok(Self::EndOfInterval),
"unset" => Ok(Self::Unset),
_ => Err(crate::Error::conversion::<Self>(s.to_owned())),
}
}
}
impl AsRef<str> for SystemCode {
fn as_ref(&self) -> &str {
self.as_str()
}
}
impl SystemCode {
pub const fn as_str(&self) -> &'static str {
match self {
Self::Heartbeat => "heartbeat",
Self::SubscriptionAck => "subscription_ack",
Self::SlowReaderWarning => "slow_reader_warning",
Self::ReplayCompleted => "replay_completed",
Self::EndOfInterval => "end_of_interval",
Self::Unset => "unset",
}
}
}
impl Display for SystemCode {
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
f.write_str(self.as_str())
}
}
#[cfg(feature = "serde")]
mod deserialize {
use std::str::FromStr;
use serde::{de, Deserialize, Deserializer, Serialize};
use super::*;
impl<'de> Deserialize<'de> for RType {
fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
let str = String::deserialize(deserializer)?;
FromStr::from_str(&str).map_err(de::Error::custom)
}
}
impl Serialize for RType {
fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
where
S: serde::Serializer,
{
self.as_str().serialize(serializer)
}
}
impl<'de> Deserialize<'de> for SType {
fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
let str = String::deserialize(deserializer)?;
FromStr::from_str(&str).map_err(de::Error::custom)
}
}
impl Serialize for SType {
fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
where
S: serde::Serializer,
{
self.as_str().serialize(serializer)
}
}
impl<'de> Deserialize<'de> for Schema {
fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
let str = String::deserialize(deserializer)?;
FromStr::from_str(&str).map_err(de::Error::custom)
}
}
impl Serialize for Schema {
fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
where
S: serde::Serializer,
{
self.as_str().serialize(serializer)
}
}
impl<'de> Deserialize<'de> for Encoding {
fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
let str = String::deserialize(deserializer)?;
FromStr::from_str(&str).map_err(de::Error::custom)
}
}
impl Serialize for Encoding {
fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
where
S: serde::Serializer,
{
self.as_str().serialize(serializer)
}
}
impl<'de> Deserialize<'de> for Compression {
fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
let str = String::deserialize(deserializer)?;
FromStr::from_str(&str).map_err(de::Error::custom)
}
}
impl Serialize for Compression {
fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
where
S: serde::Serializer,
{
self.as_str().serialize(serializer)
}
}
impl<'de> Deserialize<'de> for ErrorCode {
fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
let str = String::deserialize(deserializer)?;
FromStr::from_str(&str).map_err(de::Error::custom)
}
}
impl Serialize for ErrorCode {
fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
where
S: serde::Serializer,
{
self.as_str().serialize(serializer)
}
}
impl<'de> Deserialize<'de> for SystemCode {
fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
let str = String::deserialize(deserializer)?;
FromStr::from_str(&str).map_err(de::Error::custom)
}
}
impl Serialize for SystemCode {
fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
where
S: serde::Serializer,
{
self.as_str().serialize(serializer)
}
}
}