nautechsystems/nautilus_trader · warning
Unsupported SBE execution type: {et}
Error message
Unsupported SBE execution type: {et} What it means
map_execution_type converts the decoded SBE execution-type enum into the crate's BinanceSpotExecutionType, and the catch-all arm bails for any variant the adapter does not model. This means Binance's SBE schema contained an execution type (or the null-value/unknown discriminant) that this adapter version does not recognize.
Source
Thrown at crates/adapters/binance/src/spot/websocket/trading/decode_sbe.rs:403
delta: mantissa_to_decimal_string(free_qty_delta, qty_exponent),
clear_time: us_to_ms(clear_time_us),
})
}
fn map_execution_type(
et: execution_type::ExecutionType,
) -> anyhow::Result<BinanceSpotExecutionType> {
match et {
execution_type::ExecutionType::New => Ok(BinanceSpotExecutionType::New),
execution_type::ExecutionType::Canceled => Ok(BinanceSpotExecutionType::Canceled),
execution_type::ExecutionType::Replaced => Ok(BinanceSpotExecutionType::Replaced),
execution_type::ExecutionType::Rejected => Ok(BinanceSpotExecutionType::Rejected),
execution_type::ExecutionType::Trade => Ok(BinanceSpotExecutionType::Trade),
execution_type::ExecutionType::Expired => Ok(BinanceSpotExecutionType::Expired),
execution_type::ExecutionType::TradePrevention => {
Ok(BinanceSpotExecutionType::TradePrevention)
}
_ => anyhow::bail!("Unsupported SBE execution type: {et}"),
}
}
fn map_order_status(os: order_status::OrderStatus) -> BinanceOrderStatus {
match os {
order_status::OrderStatus::New => BinanceOrderStatus::New,
order_status::OrderStatus::PartiallyFilled => BinanceOrderStatus::PartiallyFilled,
order_status::OrderStatus::Filled => BinanceOrderStatus::Filled,
order_status::OrderStatus::Canceled => BinanceOrderStatus::Canceled,
order_status::OrderStatus::PendingCancel => BinanceOrderStatus::PendingCancel,
order_status::OrderStatus::Rejected => BinanceOrderStatus::Rejected,
order_status::OrderStatus::Expired => BinanceOrderStatus::Expired,
order_status::OrderStatus::ExpiredInMatch => BinanceOrderStatus::ExpiredInMatch,
_ => BinanceOrderStatus::Unknown,
}
}
fn map_side(side: order_side::OrderSide) -> anyhow::Result<BinanceSide> {View on GitHub (pinned to 18893faf8b)
Solutions
- Update the adapter (or regenerate SBE codecs) to include the new execution-type variant
- Log the raw discriminant value to identify the unknown variant
- As a caller, treat the error as skip-and-log for that message rather than fatal
- Check the Binance changelog for newly introduced execution types
Defensive patterns
Strategy: try-catch
Try / catch
match decode_execution_report(&payload) {
Err(e) if e.to_string().starts_with("Unsupported SBE execution type") => {
log::warn!("unknown execution type; skipping message");
}
other => other?,
} Prevention
- Keep adapter codecs updated with Binance SBE schema releases
- Log raw enum discriminants to detect new variants early
- Treat unmapped enums as skip-and-alert, not fatal
- Subscribe to Binance API changelog
When it happens
Trigger: Decoding an execution report whose SBE execution_type is not one of New/Canceled/Rejected/Trade/Expired/TradePrevention, e.g. a newly added variant or the enum's NULL_VALUE sentinel from a zeroed/default field.
Common situations: Binance adds a new execution type in a schema update before the adapter regenerates codecs; decoding frames where optional enum fields default to NULL_VALUE; using an outdated adapter against current streams.
Related errors
- Unsupported SBE order side: {side}
- Invalid NodeState value
- Invalid `ConnectionMode` value: {value}
- Wrong template ID: expected {balance_update_event_codec::SBE
- Invalid `BookAction`, was '{invalid}'
AI-assisted analysis of nautechsystems/nautilus_trader@18893faf8b (2026-09-08).
Data as JSON: /api/errors/8d919eb327d238ee.
Report an issue: GitHub.