{"record":{"id":"bd69fb8c5ef05c15","repo":"nautechsystems/nautilus_trader","slug":"invalid-ordereventany-not-orderfilled-was-ev","errorCode":null,"errorMessage":"Invalid `OrderEventAny` not `OrderFilled`, was {event:?}","messagePattern":"Invalid `OrderEventAny` not `OrderFilled`, was (.+?)","errorType":"panic","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/model/src/events/order/any.rs","lineNumber":326,"sourceCode":"            Self::CancelRejected(event) => Some(event.reason),\n            Self::Updated(_) => None,\n            Self::Filled(_) => None,\n            Self::FillVoided(event) => event.reason,\n        }\n    }\n}\n\n/// Converts an `OrderEventAny` into an `OrderFilled`.\n///\n/// # Panics\n///\n/// Panics if `event` is not a `Filled` variant.\nimpl From<OrderEventAny> for OrderFilled {\n    #[inline]\n    fn from(event: OrderEventAny) -> Self {\n        match event {\n            OrderEventAny::Filled(event) => event,\n            _ => panic!(\"Invalid `OrderEventAny` not `OrderFilled`, was {event:?}\"),\n        }\n    }\n}\n\nimpl Display for OrderEventAny {\n    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {\n        match self {\n            Self::Initialized(e) => write!(f, \"{e}\"),\n            Self::Denied(e) => write!(f, \"{e}\"),\n            Self::Emulated(e) => write!(f, \"{e}\"),\n            Self::Released(e) => write!(f, \"{e}\"),\n            Self::Submitted(e) => write!(f, \"{e}\"),\n            Self::Accepted(e) => write!(f, \"{e}\"),\n            Self::Rejected(e) => write!(f, \"{e}\"),\n            Self::Canceled(e) => write!(f, \"{e}\"),\n            Self::Expired(e) => write!(f, \"{e}\"),\n            Self::Triggered(e) => write!(f, \"{e}\"),\n            Self::PendingUpdate(e) => write!(f, \"{e}\"),","sourceCodeStart":308,"sourceCodeEnd":344,"githubUrl":"https://github.com/nautechsystems/nautilus_trader/blob/18893faf8b356be3320add8de2f861b0b647cf06/crates/model/src/events/order/any.rs#L308-L344","documentation":"The From<OrderEventAny> for OrderFilled conversion panics when the event is any variant other than OrderEventAny::Filled. It is an unchecked narrowing conversion intended only for call sites already certain the event is a fill.","triggerScenarios":"Calling OrderFilled::from(event) (or .into()) on an OrderInitialized, OrderSubmitted, OrderCanceled, or any other non-Filled OrderEventAny.","commonSituations":"Position/report code subscribing to all order events and casting without matching; changes in event flow delivering other event types where only fills were previously expected.","solutions":["Match on OrderEventAny::Filled(event) explicitly instead of using From","Filter the event stream to fills before converting","If a general conversion is needed, add a helper returning Option<OrderFilled>"],"exampleFix":"// before\nlet fill = OrderFilled::from(event); // panics for non-fill events\n// after\nlet fill = match event {\n    OrderEventAny::Filled(f) => f,\n    other => { /* skip or log */ return; }\n};","handlingStrategy":"type-guard","validationCode":"fn as_order_filled(event: &OrderEventAny) -> Option<&OrderFilled> {\n    match event {\n        OrderEventAny::Filled(f) => Some(f),\n        _ => None,\n    }\n}","typeGuard":"fn is_filled(event: &OrderEventAny) -> bool {\n    matches!(event, OrderEventAny::Filled(_))\n}","tryCatchPattern":"let fill = match event {\n    OrderEventAny::Filled(f) => f,\n    other => { debug!(\"ignoring non-fill event {other:?}\"); return; }\n};","preventionTips":["Never use From/into to narrow enums; prefer match","Filter event streams by kind before conversion","Add exhaustive match arms so new variants force updates"],"tags":["rust","panic","order-events","type-conversion"],"backgroundTag":"type-mismatch","analyzedSha":"18893faf8b356be3320add8de2f861b0b647cf06","analyzedAt":"2026-09-08T20:49:34.690Z","contentChangedAt":"2026-09-08T20:49:34.690Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}