use nautilus_core::{Params, UnixNanos};
use nautilus_model::identifiers::InstrumentId;
use nautilus_persistence_macros::custom_data;
#[custom_data(pyo3)]
pub struct RustTestCustomData {
pub instrument_id: InstrumentId,
pub value: f64,
pub flag: bool,
pub ts_event: UnixNanos,
pub ts_init: UnixNanos,
}
#[custom_data(pyo3)]
pub struct MacroYieldCurveData {
pub curve_name: String,
pub tenors: Vec<f64>,
pub interest_rates: Vec<f64>,
pub ts_event: UnixNanos,
pub ts_init: UnixNanos,
}
#[custom_data(pyo3)]
pub struct RustTestParamsCustomData {
pub name: String,
pub params: Params,
pub ts_event: UnixNanos,
pub ts_init: UnixNanos,
}
#[cfg(test)]
mod tests {
use arrow::datatypes::DataType;
use nautilus_serialization::arrow::ArrowSchemaProvider;
use rstest::rstest;
use super::*;
#[rstest]
fn test_macro_yield_curve_data_schema_has_ts_init() {
let schema = MacroYieldCurveData::get_schema(None);
let field_names: Vec<_> = schema.fields().iter().map(|f| f.name().clone()).collect();
assert!(
field_names.iter().any(|f| f == "ts_init"),
"Schema must have ts_init for DataFusion ORDER BY; got: {field_names:?}",
);
assert!(
field_names.iter().any(|f| f == "ts_event"),
"Schema must have ts_event; got: {field_names:?}",
);
}
#[rstest]
fn test_rust_test_params_custom_data_schema_uses_utf8_for_params() {
let schema = RustTestParamsCustomData::get_schema(None);
let params_field = schema.field_with_name("params").unwrap();
assert_eq!(params_field.data_type(), &DataType::Utf8);
}
}