{"record":{"id":"432089b915747671","repo":"nautechsystems/nautilus_trader","slug":"invalid-hyperliquid-bar-interval-s","errorCode":null,"errorMessage":"Invalid Hyperliquid bar interval: {s}","messagePattern":"Invalid Hyperliquid bar interval: (.+?)","errorType":"validation","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"crates/adapters/hyperliquid/src/common/enums.rs","lineNumber":96,"sourceCode":"    type Err = anyhow::Error;\n\n    fn from_str(s: &str) -> Result<Self, Self::Err> {\n        match s {\n            \"1m\" => Ok(Self::OneMinute),\n            \"3m\" => Ok(Self::ThreeMinutes),\n            \"5m\" => Ok(Self::FiveMinutes),\n            \"15m\" => Ok(Self::FifteenMinutes),\n            \"30m\" => Ok(Self::ThirtyMinutes),\n            \"1h\" => Ok(Self::OneHour),\n            \"2h\" => Ok(Self::TwoHours),\n            \"4h\" => Ok(Self::FourHours),\n            \"8h\" => Ok(Self::EightHours),\n            \"12h\" => Ok(Self::TwelveHours),\n            \"1d\" => Ok(Self::OneDay),\n            \"3d\" => Ok(Self::ThreeDays),\n            \"1w\" => Ok(Self::OneWeek),\n            \"1M\" => Ok(Self::OneMonth),\n            _ => anyhow::bail!(\"Invalid Hyperliquid bar interval: {s}\"),\n        }\n    }\n}\n\nimpl Display for HyperliquidBarInterval {\n    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {\n        write!(f, \"{}\", self.as_str())\n    }\n}\n\n/// Represents the order side (Buy or Sell).\n#[derive(\n    Copy,\n    Clone,\n    Debug,\n    Display,\n    PartialEq,\n    Eq,","sourceCodeStart":78,"sourceCodeEnd":114,"githubUrl":"https://github.com/nautechsystems/nautilus_trader/blob/18893faf8b356be3320add8de2f861b0b647cf06/crates/adapters/hyperliquid/src/common/enums.rs#L78-L114","documentation":"FromStr for the Hyperliquid bar-interval enum accepts only the fixed venue strings ('1m','3m','5m','15m','30m','1h','2h','4h','8h','12h','1d','3d', and so on); any other interval string fails to parse into an enum variant.","triggerScenarios":"Calling from_str (or passing an interval string through bar-request config) with a value like \"2h\", \"30m\", \"1min\", or \"W\" that Hyperliquid does not define.","commonSituations":"Reusing interval presets from other exchanges (e.g. Binance's 2h/4h... though Hyperliquid has 4h, others like 2h differ); typos or case mistakes such as \"1m\" vs \"1M\" (minute vs month).","solutions":["Use one of Hyperliquid's supported intervals: 1m,3m,5m,15m,30m,1h,2h,4h,8h,12h,1d,3d,1w,1M.","Normalize/mapping-table your app's intervals to the closest supported Hyperliquid interval.","Validate the interval string before constructing the request and surface the supported list in your config error."],"exampleFix":"// before\nlet interval = HyperliquidBarInterval::from_str(\"2h\")?; // not supported\n// after\nlet interval = HyperliquidBarInterval::from_str(\"1h\")?; // valid interval","handlingStrategy":"validation","validationCode":"const VALID_INTERVALS: &[&str] = &[\"1m\",\"3m\",\"5m\",\"15m\",\"30m\",\"1h\",\"2h\",\"4h\",\"8h\",\"12h\",\"1d\",\"3d\",\"1w\",\"1M\"];\nfn valid_interval(s: &str) -> bool { VALID_INTERVALS.contains(&s) }","typeGuard":null,"tryCatchPattern":"match HyperliquidBarInterval::from_str(s) {\n    Ok(i) => use_interval(i),\n    Err(e) => eprintln!(\"{e}; supported: {VALID_INTERVALS:?}\"),\n}","preventionTips":["Store intervals as the enum, not free strings, in config.","Map external exchange intervals to Hyperliquid's set explicitly.","Watch the 1m vs 1M (minute vs month) case distinction."],"tags":["hyperliquid","bars","interval","rust","parsing"],"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"}