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::{SettingsDiagnostic, check_emission, check_emission_diagnostics};
46pub use schema::{
47 Applicability, EffectiveNumber, NumericBounds, NumericBoundsError, SettingDefinition,
48 SettingEnumMember, SettingId, SettingIdentity, SettingOccurrence, SettingOperationError,
49 SettingPresentation, SettingScope, SettingSource, SettingSourceEdit, SettingSourceKind,
50 SettingTarget, SettingTargetKind, SettingValue, SettingValueDomain, TeamId, definition,
51 definitions, definitions_by_id, validate_catalog,
52};
53
54use crate::core::source::Span;
55
56#[derive(Debug, Clone)]
58pub struct Settings {
59 pub span: Option<Span>,
60 pub children: Vec<SettingsNode>,
61}
62
63#[derive(Debug, Clone)]
65pub enum SettingsNode {
66 Workshop {
68 children: Vec<SettingsNode>,
69 span: Option<Span>,
70 },
71 Group {
72 name: String,
73 children: Vec<SettingsNode>,
74 span: Option<Span>,
75 },
76 Number {
77 name: String,
78 value: f64,
79 span: Option<Span>,
80 },
81 Bool {
82 name: String,
83 value: bool,
84 span: Option<Span>,
85 },
86 Flag { name: String, span: Option<Span> },
88 String {
89 name: String,
90 value: String,
91 span: Option<Span>,
92 },
93 List {
94 name: String,
95 elements: Vec<SettingsListElement>,
96 span: Option<Span>,
97 },
98 Raw {
102 name: String,
103 value: String,
104 span: Option<Span>,
105 },
106 RawValue {
112 name: String,
113 value: String,
114 span: Option<Span>,
115 },
116}
117
118#[derive(Debug, Clone)]
120pub struct SettingsListElement {
121 pub value: String,
122 pub span: Option<Span>,
123}
124
125impl SettingsNode {
126 pub fn span(&self) -> Option<Span> {
128 match self {
129 SettingsNode::Workshop { span, .. }
130 | SettingsNode::Group { span, .. }
131 | SettingsNode::Number { span, .. }
132 | SettingsNode::Bool { span, .. }
133 | SettingsNode::Flag { span, .. }
134 | SettingsNode::String { span, .. }
135 | SettingsNode::List { span, .. }
136 | SettingsNode::Raw { span, .. }
137 | SettingsNode::RawValue { span, .. } => *span,
138 }
139 }
140
141 pub fn name(&self) -> &str {
143 match self {
144 SettingsNode::Workshop { .. } => "workshop",
145 SettingsNode::Group { name, .. }
146 | SettingsNode::Number { name, .. }
147 | SettingsNode::Bool { name, .. }
148 | SettingsNode::Flag { name, .. }
149 | SettingsNode::String { name, .. }
150 | SettingsNode::List { name, .. }
151 | SettingsNode::Raw { name, .. }
152 | SettingsNode::RawValue { name, .. } => name,
153 }
154 }
155}