pub enum Step {
Line(OutputLine),
Choices(Vec<Choice>),
Done,
End,
Suspended,
}Expand description
A single step of story output from [Story::continue_single].
The enum tells the caller what to do next:
Line— more output may follow, keep callingcontinue_single.Done— this turn’s output is complete. Callcontinue_singleagain for the next turn (the story isn’t over).Choices— pick a choice via [Story::choose], then resume.End— the story has permanently ended.
Terminals carry no payload (docs/prose-dialect-spec.md §7, RULED —
this replaces the earlier Line enum, whose terminal variants fused
trailing text onto the outcome). Any trailing content that precedes a
terminal is always delivered first as its own Step::Line — a caller
draining continue_single in a loop sees the same total text either
way, just spread across one more step when a turn ends mid-line.
Variants§
Line(OutputLine)
One line of story content. More may follow — keep calling
[Story::continue_single].
Choices(Vec<Choice>)
The story is presenting choices. Call [Story::choose] then
resume with [Story::continue_single].
Done
This turn’s output is complete (ink -> DONE). The story isn’t
over — call [Story::continue_single] again for more.
End
The story has permanently ended (ink -> END).
Suspended
A flow parked at an await site (the FlowFrame model,
docs/flow-suspension-spec.md §10.1). Like Done, a park is a
turn boundary: text accumulated before the park flushes with
it (as its own preceding Step::Line), so the pre-await state is
never held hostage. The host wakes the flow via
[Story::wake_check] and drives it when it wants output — a park
never auto-continues.
Runtime-unreachable until FS-3r. No code path in today’s
runtime constructs this variant — the E052 lowering fence
(docs/flow-suspension-spec.md §11.4) keeps await from
producing bytecode, so park/spill/resume do not yet exist.
See step_suspended_is_terminal_and_never_constructed_in_runtime
for the “nothing constructs it” guard.
Implementations§
Source§impl Step
impl Step
Sourcepub fn text(&self) -> &str
pub fn text(&self) -> &str
The text content of this step. Only Step::Line carries any —
every other (terminal) variant returns the empty string, since
terminals carry no payload.
The tags associated with this step. Only Step::Line carries
any — every other (terminal) variant returns an empty slice.
Sourcepub fn is_terminal(&self) -> bool
pub fn is_terminal(&self) -> bool
Returns true if this is a terminal variant (Choices, Done,
End, or Suspended) — anything but Line. A park is a turn
boundary, so Suspended is terminal.