a-b-street/abstreet · error

not a turn

Error message

not a turn

What it means

Mirror of as_lane: this unwrapping helper on the Traversable enum fires when as_turn is called on a Traversable::Lane variant. The caller asserted the traversable is a turn but it holds a lane ID; maybe_turn exists for non-panicking callers.

Solutions

  1. Use maybe_turn() and handle the None case instead of as_turn
  2. Match on the Traversable enum explicitly at the call site
  3. Fix upstream logic so only turn traversables reach as_turn
Defensive patterns

Strategy: type-guard

When it happens

Trigger: Thrown at map_model/src/traversable.rs:164 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of a-b-street/abstreet@0964f29315 (2026-09-13). Data as JSON: /api/errors/16d064e3bb4b608e. Report an issue: GitHub.

Appendix: source

Thrown at map_model/src/traversable.rs:164

pub fn as_turn(&self) -> TurnID {
    match *self {
        Traversable::Turn(id) => id,
        Traversable::Lane(_) => panic!("not a turn"),
    }
}

pub fn maybe_turn(&self) -> Option<TurnID> {
    match *self {
        Traversable::Turn(id) => Some(id),
        Traversable::Lane(_) => None,
    }
}

View on GitHub (pinned to 0964f29315)