nautechsystems/nautilus_trader · error

catalog replay loading for {data_cls} is not supported

Error message

catalog replay loading for {data_cls} is not supported

What it means

load_slice in the catalog replay loader dispatches on the data class (data_cls) and only supports the implemented catalog record types; any other class string hits the catch-all and bails. It means replay from catalog for that data type is not implemented.

Source

Thrown at crates/event_store/src/replay/catalog.rs:108

                    start,
                    end,
                    None,
                    files,
                    false,
                )?,
            )),
            "bars" => Ok(catalog_replay_records(
                self.catalog.query_typed_data::<Bar>(
                    identifiers,
                    start,
                    end,
                    None,
                    files,
                    false,
                )?,
            )),
            data_cls => {
                anyhow::bail!("catalog replay loading for {data_cls} is not supported")
            }
        }
    }
}

fn catalog_replay_records<T>(records: Vec<T>) -> Vec<CatalogReplayRecord>
where
    T: Into<CatalogReplayData>,
{
    records
        .into_iter()
        .map(Into::into)
        .map(CatalogReplayRecord::from_data)
        .collect()
}

#[cfg(test)]
mod tests {

View on GitHub (pinned to 18893faf8b)

Solutions

  1. Use one of the supported catalog replay data classes for replay
  2. Implement a match arm in load_slice for the needed data class (read files via the existing catalog helpers and map through catalog_replay_records)
  3. Fix the data_cls string in your replay config to the exact supported name

Example fix

// before
replay.load_slice("MyQuotes", start, end, ...)?
// after
// implement:
data_cls @ "MyQuotes" => Ok(catalog_replay_records(read_myquotes_files(files)?)),
// or use a supported class:
replay.load_slice("QuoteTick", start, end, ...)?
Defensive patterns

Strategy: try-catch

Validate before calling

const SUPPORTED: &[&str] = &["QuoteTick", "TradeTick", "Bar", ...];
assert!(SUPPORTED.contains(&data_cls), "catalog replay unsupported for {data_cls}");

Try / catch

match load_slice(data_cls, ...) {
    Err(e) if e.to_string().contains("is not supported") => eprintln!("fallback: replay {data_cls} via raw reader"),
    other => other?,
}

Prevention

When it happens

Trigger: Requesting a catalog replay load_slice with a data_cls for which no match arm exists (an unimplemented/unsupported data class), e.g. a newer data type not yet wired into the replay loader.

Common situations: Running replay with a data type the event store's catalog loader doesn't cover; upgrading the writer to produce a new catalog class while the replay loader lags behind; typo'd data class string in configuration.

Understand the failure class

Background: UnsupportedOperationException and "is not supported" errors: when a library deliberately refuses a call — this error's family across 30 libraries.

Related errors


AI-assisted analysis of nautechsystems/nautilus_trader@18893faf8b (2026-09-08). Data as JSON: /api/errors/d640259b0869f334. Report an issue: GitHub.