1use crate::ability_tree;
2
3#[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>, #[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 >,
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}