{"record":{"id":"46cce40e557761be","repo":"nautechsystems/nautilus_trader","slug":"unknown-ib-builder-time-in-force-value","errorCode":null,"errorMessage":"Unknown IB builder time in force: {value}","messagePattern":"Unknown IB builder time in force: (.+?)","errorType":"validation","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"crates/adapters/interactive_brokers/src/common/enums/order.rs","lineNumber":639,"sourceCode":"        }\n    }\n}\n\nimpl FromStr for IbBuilderTimeInForce {\n    type Err = anyhow::Error;\n\n    fn from_str(value: &str) -> Result<Self, Self::Err> {\n        match value {\n            \"DAY\" => Ok(Self::Day),\n            \"GTC\" => Ok(Self::GoodTillCancel),\n            \"IOC\" => Ok(Self::ImmediateOrCancel),\n            \"GTD\" => Ok(Self::GoodTillDate),\n            \"FOK\" => Ok(Self::FillOrKill),\n            \"GTX\" => Ok(Self::GoodTillCrossing),\n            \"DTC\" => Ok(Self::DayTillCanceled),\n            \"AUC\" => Ok(Self::Auction),\n            \"OPG\" => Ok(Self::OpeningAuction),\n            _ => anyhow::bail!(\"Unknown IB builder time in force: {value}\"),\n        }\n    }\n}\n\nimpl Display for IbBuilderTimeInForce {\n    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {\n        f.write_str(self.as_str())\n    }\n}\n\n/// Interactive Brokers combo-leg open/close values.\n#[derive(Debug, Clone, Copy, PartialEq, Eq)]\n#[cfg_attr(\n    feature = \"python\",\n    pyo3::pyclass(\n        module = \"nautilus_trader.adapters.interactive_brokers\",\n        from_py_object,\n        rename_all = \"SCREAMING_SNAKE_CASE\"","sourceCodeStart":621,"sourceCodeEnd":657,"githubUrl":"https://github.com/nautechsystems/nautilus_trader/blob/18893faf8b356be3320add8de2f861b0b647cf06/crates/adapters/interactive_brokers/src/common/enums/order.rs#L621-L657","documentation":"IbBuilderTimeInForce::from_str in crates/adapters/interactive_brokers/src/common/enums/order.rs:639 (IB KittyBuilder/builder-futures TIF) fails when the string does not exactly match GTD, FOK, GTX, DTC, AUC, or OPG, and raises via anyhow::bail!. Note this enum's accepted set differs from the regular IbTimeInForce enum.","triggerScenarios":"Parsing a builder order TIF such as \"DAY\", \"GTC\", or \"IOC\" — codes valid for regular orders but not for builder orders — or any mistyped/lowercase value.","commonSituations":"Reusing the regular-order TIF value in a builder-futures order payload; assuming both enums accept the same codes; config shared between regular and builder order paths.","solutions":["Use one of the builder-specific codes: \"GTD\", \"FOK\", \"GTX\", \"DTC\", \"AUC\", \"OPG\".","If the value came from a regular IbTimeInForce, map it explicitly to the nearest builder variant instead of reusing the string.","Normalize case/whitespace before parsing.","Add a new match arm upstream if a builder TIF code is genuinely missing."],"exampleFix":"// before\nlet tif = \"DAY\".parse::<IbBuilderTimeInForce>()?; // bail! Unknown IB builder time in force: DAY\n// after\nlet tif = \"GTD\".parse::<IbBuilderTimeInForce>()?; // Ok(GoodTillDate)","handlingStrategy":"validation","validationCode":"const IB_BUILDER_TIFS: &[&str] = &[\"GTD\",\"FOK\",\"GTX\",\"DTC\",\"AUC\",\"OPG\"];\nfn is_valid_builder_tif(s: &str) -> bool {\n    IB_BUILDER_TIFS.contains(&s.trim().to_ascii_uppercase().as_str())\n}","typeGuard":"fn as_builder_tif(s: &str) -> Option<IbBuilderTimeInForce> {\n    s.trim().to_ascii_uppercase().parse::<IbBuilderTimeInForce>().ok()\n}","tryCatchPattern":"match value.parse::<IbBuilderTimeInForce>() {\n    Ok(tif) => submit_builder_order(tif),\n    Err(e) => log::error!(\"builder TIF '{value}' unsupported (builder != regular TIF set): {e}\"),\n}","preventionTips":["Remember builder TIFs differ from regular IB TIFs — never reuse regular TIF strings.","Map IbTimeInForce -> IbBuilderTimeInForce explicitly when crossing order paths.","Validate builder TIF when deserializing order payloads."],"tags":["rust","enum-parsing","interactive-brokers","builder-futures"],"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-14T05:17:10.506Z"}