1pub(crate) mod check;
12pub(crate) mod emitter;
13pub(crate) mod parser;
14
15pub(crate) mod reconciliation;
16pub(crate) mod schema;
17pub(crate) mod table;
18
19#[derive(Debug, Clone, Copy, Hash)]
21pub enum PathPart<'a> {
22 Part(&'a str),
25 Team,
27 Hero,
29}
30
31impl<'b> PartialEq<PathPart<'b>> for PathPart<'_> {
32 fn eq(&self, other: &PathPart<'b>) -> bool {
33 match (self, other) {
34 (PathPart::Part(left), PathPart::Part(right)) => left == right,
35 (PathPart::Team, PathPart::Team) => true,
36 (PathPart::Hero, PathPart::Hero) => true,
37 _ => false,
38 }
39 }
40}
41
42impl Eq for PathPart<'_> {}
43
44pub use check::check_emission;
45pub use schema::{
46 Applicability, EffectiveNumber, NumericBounds, NumericBoundsError, SettingDefinition,
47 SettingEnumMember, SettingId, SettingIdentity, SettingOccurrence, SettingOperationError,
48 SettingPresentation, SettingScope, SettingSource, SettingSourceEdit, SettingSourceKind,
49 SettingTarget, SettingTargetKind, SettingValue, SettingValueDomain, TeamId, definition,
50 definitions, definitions_by_id, validate_catalog,
51};
52
53use crate::core::source::Span;
54
55#[derive(Debug, Clone)]
57pub struct Settings {
58 pub span: Option<Span>,
59 pub children: Vec<SettingsNode>,
60}
61
62#[derive(Debug, Clone)]
64pub enum SettingsNode {
65 Workshop {
67 children: Vec<SettingsNode>,
68 span: Option<Span>,
69 },
70 Group {
71 name: String,
72 children: Vec<SettingsNode>,
73 span: Option<Span>,
74 },
75 Number {
76 name: String,
77 value: f64,
78 span: Option<Span>,
79 },
80 Bool {
81 name: String,
82 value: bool,
83 span: Option<Span>,
84 },
85 Flag { name: String, span: Option<Span> },
87 String {
88 name: String,
89 value: String,
90 span: Option<Span>,
91 },
92 List {
93 name: String,
94 elements: Vec<SettingsListElement>,
95 span: Option<Span>,
96 },
97 Raw {
101 name: String,
102 value: String,
103 span: Option<Span>,
104 },
105}
106
107#[derive(Debug, Clone)]
109pub struct SettingsListElement {
110 pub value: String,
111 pub span: Option<Span>,
112}
113
114impl SettingsNode {
115 pub fn span(&self) -> Option<Span> {
117 match self {
118 SettingsNode::Workshop { span, .. }
119 | SettingsNode::Group { span, .. }
120 | SettingsNode::Number { span, .. }
121 | SettingsNode::Bool { span, .. }
122 | SettingsNode::Flag { span, .. }
123 | SettingsNode::String { span, .. }
124 | SettingsNode::List { span, .. }
125 | SettingsNode::Raw { span, .. } => *span,
126 }
127 }
128
129 pub fn name(&self) -> &str {
131 match self {
132 SettingsNode::Workshop { .. } => "workshop",
133 SettingsNode::Group { name, .. }
134 | SettingsNode::Number { name, .. }
135 | SettingsNode::Bool { name, .. }
136 | SettingsNode::Flag { name, .. }
137 | SettingsNode::String { name, .. }
138 | SettingsNode::List { name, .. }
139 | SettingsNode::Raw { name, .. } => name,
140 }
141 }
142}