{"record":{"id":"6cbe2da41cf04042","repo":"nautechsystems/nautilus_trader","slug":"invalid-bybit-smp-type-s-expected-none-canc","errorCode":null,"errorMessage":"invalid Bybit smp_type: '{s}', expected None, CancelMaker, CancelTaker or CancelBoth","messagePattern":"invalid Bybit smp_type: '(.+?)', expected None, CancelMaker, CancelTaker or CancelBoth","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/adapters/bybit/src/common/parse.rs","lineNumber":1740,"sourceCode":"    } else if let Some(n) = value.as_i64() {\n        Some(n.to_string())\n    } else {\n        value.as_u64().map(|n| n.to_string())\n    }\n}\n\n/// Parses a Bybit self-match prevention type from an order parameter or configuration value.\n///\n/// # Errors\n///\n/// Returns an error for any value outside the four types Bybit accepts on an order.\npub fn parse_smp_type(s: &str) -> anyhow::Result<BybitOrderSmpType> {\n    match s.to_ascii_lowercase().as_str() {\n        \"none\" => Ok(BybitOrderSmpType::None),\n        \"cancelmaker\" => Ok(BybitOrderSmpType::CancelMaker),\n        \"canceltaker\" => Ok(BybitOrderSmpType::CancelTaker),\n        \"cancelboth\" => Ok(BybitOrderSmpType::CancelBoth),\n        _ => anyhow::bail!(\n            \"invalid Bybit smp_type: '{s}', expected None, CancelMaker, CancelTaker or CancelBoth\"\n        ),\n    }\n}\n\n/// Deserializes an optional self-match prevention type for a client configuration.\n///\n/// Routes the configured text through [`parse_smp_type`] so a serialized config reports an unknown\n/// value instead of carrying it silently.\n///\n/// # Errors\n///\n/// Returns an error for any value outside the four types Bybit accepts on an order.\npub fn deserialize_optional_smp_type<'de, D: serde::Deserializer<'de>>(\n    d: D,\n) -> Result<Option<BybitOrderSmpType>, D::Error> {\n    let Some(value) = Option::<String>::deserialize(d)? else {\n        return Ok(None);","sourceCodeStart":1722,"sourceCodeEnd":1758,"githubUrl":"https://github.com/nautechsystems/nautilus_trader/blob/18893faf8b356be3320add8de2f861b0b647cf06/crates/adapters/bybit/src/common/parse.rs#L1722-L1758","documentation":"parse_smp_type parses a user-supplied self-match-prevention (smp_type) string into the BybitOrderSmpType enum. Matching is case-insensitive over the fixed set none/cancelmaker/canceltaker/cancelboth; any other string raises this anyhow error. It is reached via order submission (py_submit_order, py_new), TP/SL params, or config deserialization.","triggerScenarios":"Passing smp_type as an order/TP-SL param or in client config with a misspelled or unsupported value, e.g. 'CANCEL_MAKER', 'cancel-maker', 'smptype_cancelboth', or an empty string.","commonSituations":"Config mistakes copying values from another exchange adapter's naming convention (snake_case or prefixed), typos, or leaving a placeholder value in the config file.","solutions":["Use exactly one of: none, cancelmaker, canceltaker, cancelboth (case does not matter)","Check the config/order params for stray prefixes, underscores or hyphens and remove them","If SMP is not needed, set smp_type to none or omit it"],"exampleFix":"// before\nparams.insert(\"smp_type\", \"CANCEL_MAKER\");\n// after\nparams.insert(\"smp_type\", \"CancelMaker\");","handlingStrategy":"validation","validationCode":"VALID_SMP_TYPES = {\"none\", \"cancelmaker\", \"canceltaker\", \"cancelboth\"}\nassert smp_type.lower() in VALID_SMP_TYPES, f\"invalid smp_type: {smp_type}\"","typeGuard":"fn is_valid_smp_type(s: &str) -> bool {\n    matches!(s.to_ascii_lowercase().as_str(), \"none\" | \"cancelmaker\" | \"canceltaker\" | \"cancelboth\")\n}","tryCatchPattern":"match parse_smp_type(s) {\n    Ok(t) => use(t),\n    Err(e) => { log::error!(\"{e}\"); BybitOrderSmpType::None }\n}","preventionTips":["Use only the four accepted values, without underscores or hyphens","Centralize smp_type constants instead of inlining strings","Values are case-insensitive, but keep canonical CamelCase in configs"],"tags":["bybit","smp","self-match-prevention","invalid-enum","order"],"backgroundTag":"invalid-enum-value","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"}