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}
107
108#[derive(Debug, Clone)]
110pub struct SettingsListElement {
111 pub value: String,
112 pub span: Option<Span>,
113}
114
115impl SettingsNode {
116 pub fn span(&self) -> Option<Span> {
118 match self {
119 SettingsNode::Workshop { span, .. }
120 | SettingsNode::Group { span, .. }
121 | SettingsNode::Number { span, .. }
122 | SettingsNode::Bool { span, .. }
123 | SettingsNode::Flag { span, .. }
124 | SettingsNode::String { span, .. }
125 | SettingsNode::List { span, .. }
126 | SettingsNode::Raw { span, .. } => *span,
127 }
128 }
129
130 pub fn name(&self) -> &str {
132 match self {
133 SettingsNode::Workshop { .. } => "workshop",
134 SettingsNode::Group { name, .. }
135 | SettingsNode::Number { name, .. }
136 | SettingsNode::Bool { name, .. }
137 | SettingsNode::Flag { name, .. }
138 | SettingsNode::String { name, .. }
139 | SettingsNode::List { name, .. }
140 | SettingsNode::Raw { name, .. } => name,
141 }
142 }
143}