boseiju/parser/
node.rs

1use crate::ability_tree;
2
3/// Since this can carry entire ability trees, we need to box the biggest variants.
4/// Otherwise, this can easily blow up the stack when attempting to store multiple of them.
5/// Current size is 112 bytes, let's try to keep it around here ?
6#[derive(idris_derive::Idris)]
7#[derive(Debug, Clone, PartialEq, Eq)]
8pub enum ParserNode {
9    LexerToken(crate::lexer::tokens::Token),
10    Ability {
11        ability: ability_tree::ability::Ability,
12    },
13    AbilityTree {
14        tree: ability_tree::AbilityTree,
15    },
16    Condition {
17        condition: ability_tree::conditional::Condition,
18    },
19    ContinuousEffect {
20        effect: ability_tree::ability::statik::continuous_effect::ContinuousEffect,
21    },
22    Colors {
23        colors: crate::ability_tree::colors::Colors,
24    },
25    Cost {
26        cost: ability_tree::cost::Cost,
27    },
28    CostModification {
29        cost_modification: ability_tree::ability::statik::cost_modification_effect::CostModification,
30    },
31    CostModificationEffect {
32        cost_modification: ability_tree::ability::statik::cost_modification_effect::CostModificationEffect,
33    },
34    CountSpecifier {
35        count: crate::ability_tree::object::CountSpecifier,
36    },
37    CreatedTokenKind {
38        kind: ability_tree::imperative::CreatedTokenKind,
39    },
40    CreatureAction {
41        action: ability_tree::event::CreatureAction,
42    },
43    CreatureSubtypeList {
44        list: arrayvec::ArrayVec<crate::ability_tree::object::CreatureSubtype, 24>, /* Fixme */
45        #[cfg(feature = "spanned_tree")]
46        span: crate::ability_tree::span::TreeSpan,
47    },
48    Event {
49        event: ability_tree::event::Event,
50    },
51    EventReplacement {
52        replacement: ability_tree::event::replacement::EventReplacement,
53    },
54    EventSource {
55        source: ability_tree::event::source::EventSource,
56    },
57    EventSourceReference {
58        source: ability_tree::event::replacement::EventSourceReference,
59    },
60    ExileFollowUp {
61        follow_up: ability_tree::imperative::ExileFollowUp,
62    },
63    Imperative {
64        imperative: ability_tree::imperative::Imperative,
65    },
66    ImperativeList {
67        imperatives: ability_tree::imperative::ImperativeList,
68    },
69    ImperativeChoices {
70        choices: crate::utils::HeapArrayVec<ability_tree::ability::spell::SpellAbility, 23 /* Fixme */>,
71        #[cfg(feature = "spanned_tree")]
72        span: crate::ability_tree::span::TreeSpan,
73    },
74    KeywordAbility {
75        ability: ability_tree::ability::KeywordAbility,
76    },
77    ManaCost {
78        mana_cost: ability_tree::terminals::ManaCost,
79    },
80    Number {
81        number: ability_tree::number::Number,
82    },
83    ObjectReference {
84        reference: ability_tree::object::ObjectReference,
85    },
86    ObjectSpecifier {
87        specifier: ability_tree::object::ObjectSpecifier,
88    },
89    ObjectSpecifiers {
90        specifiers: ability_tree::object::ObjectSpecifiers,
91    },
92    Player {
93        player: ability_tree::player::PlayerSpecifier,
94    },
95    PlayerAction {
96        action: ability_tree::event::PlayerAction,
97    },
98    PreviouslyMentionnedObject {
99        object: ability_tree::object::PreviouslyMentionnedObject,
100    },
101    PutCounterKind {
102        kind: ability_tree::imperative::CounterKind,
103    },
104    SpellAbility {
105        ability: crate::ability_tree::ability::spell::SpellAbility,
106    },
107    Statement {
108        statement: ability_tree::statement::Statement,
109    },
110    StaticAbilityKind {
111        kind: crate::ability_tree::ability::statik::StaticAbilityKind,
112    },
113    TokenDefinition {
114        token: ability_tree::card_layout::TokenLayout,
115    },
116    TriggerCondition {
117        condition: ability_tree::ability::triggered::TriggerCondition,
118    },
119    AbilityKind {
120        ability: ability_tree::ability::AbilityKind,
121    },
122    ZoneReference {
123        zone: ability_tree::zone::ZoneReference,
124    },
125}
126
127impl From<crate::lexer::tokens::Token> for ParserNode {
128    fn from(token: crate::lexer::tokens::Token) -> Self {
129        ParserNode::LexerToken(token)
130    }
131}