pub enum Step {
Line(OutputLine),
Choices(Vec<Choice>),
Done,
End,
Suspended,
}Expand description
The runtime types that appear in bevy-brink’s own public signatures,
re-exported so consumers can name them without depending on brink-runtime:
FlowInstance, Program,
Choice, Step’s
return, RuntimeError’s error,
FallbackHandler for the “no bindings” advance path, the scoped
story-state types a host needs to build a policy and a per-step routing
view (see docs/scoped-flow-state-spec.md): WorldPolicy, Scope,
PolicyError, and ContextView (usually built via
flow_context_view instead of by hand) — and the per-entity durability
types produced/consumed by BrinkGlobals::save_state/load_state and
save_flow_state/load_flow_state (F6.3, see the globals module’s
“Save/load” docs): SaveState and LoadReport.
World is deliberately absent here — it collides with bevy::prelude::World
under a glob import, so it is re-exported under the alias BrinkWorld.
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.
Trait Implementations§
impl Eq for Step
impl StructuralPartialEq for Step
Auto Trait Implementations§
impl Freeze for Step
impl RefUnwindSafe for Step
impl Send for Step
impl Sync for Step
impl Unpin for Step
impl UnsafeUnpin for Step
impl UnwindSafe for Step
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> ConditionalSend for Twhere
T: Send,
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>, which can then be
downcast into Box<dyn ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>, which can then be further
downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSend for T
impl<T> DowncastSend for T
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.