Skip to main content

QuestPlanContent

Struct QuestPlanContent 

Source
pub struct QuestPlanContent {
    pub quests: Vec<PlannedQuest>,
    pub finale: QuestId,
    pub branch_points: Vec<BranchPoint>,
}
Expand description

Stage 4 payload: the quest dependency plan.

Fields§

§quests: Vec<PlannedQuest>

Planned quests (expanded in stage 5).

§finale: QuestId

The quest whose completion ends the campaign.

§branch_points: Vec<BranchPoint>

The campaign’s declared story forks (DSL v0.8, spec-0025). Empty/absent = a campaign that claims to have no branch — which the compiler then verifies rather than assumes: any flag that gates casts, staging or structure and is set on some playthroughs and not others belongs to no declared point and is DW0480.

Enumerated branches are the product of the declared points, so the branch set is authored and small — never a combinatorial sweep of every flag in the campaign.

Implementations§

Source§

impl QuestPlanContent

Source

pub fn spine(&self) -> BTreeSet<&str>

The ONE authority on which quests are the spine: the finale and every quest its depends_on chain transitively demands — the quests a body cannot reach the finale without.

The capability belongs here, on the stage-4 document, because the spine is a fact about the quest plan and about nothing else. It had grown two derivations of the same closure in two files — one inline in crate::validate’s DW0132 convergence check, one a private mandatory_quests in crate::layout read by the layout binding and by the critical-path spine obligation. Both were correct and neither said it was the authority, which is exactly the shape a later clean merge turns into two rules that disagree.

Why the closure is taken over the raw depends_on edges, unfiltered. The validate copy first dropped every dep naming a quest the plan does not declare. That filtering is not this function’s question: a dangling depends_on is DW0112’s finding, and silently pruning it here would make the set disagree with the document it is derived from. So an id the plan does not declare is reported in the spine and expands no further — and the one reader that could care, DW0132, only ever asks whether a declared quest is a member, so an undeclared member cannot change its verdict.

Cycle-safe by construction (a quest already in the set is not expanded again), so a plan DW0130 will refuse still yields a set rather than hanging.

Not the same question as the mandatory field, and the name says so deliberately. Today the two sets always coincide, because DW0132 demands every declared quest be a transitive dependency of the finale and DW0866 demands every quest set mandatory: true. If mandatory: false ever becomes legal those coincide no longer, and this function keeps answering the graph question it has always answered.

Source

pub fn optional(&self) -> BTreeSet<&str>

The ONE authority on which quests are elective (spec-0051): the quests declaring mandatory: false.

The counterpart to Self::spine, and deliberately a different question. spine asks what the graph demands; this asks what the author claims. DW0866/DW0867 are exactly the rules that keep the two answers honest about each other, and they can only do that while each side has one derivation — which is the defect the spine function was created to end, and which a second private !q.mandatory filter in the compiler would re-introduce on the other half.

Trait Implementations§

Source§

impl Clone for QuestPlanContent

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for QuestPlanContent

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for QuestPlanContent

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl JsonSchema for QuestPlanContent

Source§

fn schema_name() -> Cow<'static, str>

The name of the generated JSON Schema. Read more
Source§

fn schema_id() -> Cow<'static, str>

Returns a string that uniquely identifies the schema produced by this type. Read more
Source§

fn json_schema(generator: &mut SchemaGenerator) -> Schema

Generates a JSON Schema for this type. Read more
Source§

fn inline_schema() -> bool

Whether JSON Schemas generated for this type should be included directly in parent schemas, rather than being re-used where possible using the $ref keyword. Read more
Source§

impl PartialEq for QuestPlanContent

Source§

fn eq(&self, other: &Self) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl Serialize for QuestPlanContent

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more
Source§

impl StructuralPartialEq for QuestPlanContent

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

Source§

impl<T> DynClone for T
where T: Clone,

Source§

fn __clone_box(&self, _: Private) -> *mut ()

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.