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