pub(crate) mod emitter;
pub(crate) mod parser;
pub(crate) mod reconciliation;
pub mod schema;
pub(crate) mod table;
#[derive(Debug, Clone, Copy, Hash)]
pub enum PathPart<'a> {
Part(&'a str),
Team,
Hero,
}
impl<'b> PartialEq<PathPart<'b>> for PathPart<'_> {
fn eq(&self, other: &PathPart<'b>) -> bool {
match (self, other) {
(PathPart::Part(left), PathPart::Part(right)) => left == right,
(PathPart::Team, PathPart::Team) => true,
(PathPart::Hero, PathPart::Hero) => true,
_ => false,
}
}
}
impl Eq for PathPart<'_> {}
pub use schema::{
Applicability, EffectiveNumber, NumericBounds, NumericBoundsError, SettingDefinition,
SettingEnumMember, SettingId, SettingIdentity, SettingOccurrence, SettingOperationError,
SettingPresentation, SettingScope, SettingSource, SettingSourceEdit, SettingSourceKind,
SettingTarget, SettingTargetKind, SettingValue, SettingValueDomain, TeamId, definition,
definitions, definitions_by_id,
};
use crate::core::source::Span;
#[derive(Debug, Clone)]
pub struct Settings {
pub span: Option<Span>,
pub children: Vec<SettingsNode>,
}
#[derive(Debug, Clone)]
pub enum SettingsNode {
Workshop {
children: Vec<SettingsNode>,
span: Option<Span>,
},
Group {
name: String,
children: Vec<SettingsNode>,
span: Option<Span>,
},
Number {
name: String,
value: f64,
span: Option<Span>,
},
Bool {
name: String,
value: bool,
span: Option<Span>,
},
Flag { name: String, span: Option<Span> },
String {
name: String,
value: String,
span: Option<Span>,
},
List {
name: String,
elements: Vec<SettingsListElement>,
span: Option<Span>,
},
Raw {
name: String,
value: String,
span: Option<Span>,
},
}
#[derive(Debug, Clone)]
pub struct SettingsListElement {
pub value: String,
pub span: Option<Span>,
}
impl SettingsNode {
pub fn span(&self) -> Option<Span> {
match self {
SettingsNode::Workshop { span, .. }
| SettingsNode::Group { span, .. }
| SettingsNode::Number { span, .. }
| SettingsNode::Bool { span, .. }
| SettingsNode::Flag { span, .. }
| SettingsNode::String { span, .. }
| SettingsNode::List { span, .. }
| SettingsNode::Raw { span, .. } => *span,
}
}
pub fn name(&self) -> &str {
match self {
SettingsNode::Workshop { .. } => "workshop",
SettingsNode::Group { name, .. }
| SettingsNode::Number { name, .. }
| SettingsNode::Bool { name, .. }
| SettingsNode::Flag { name, .. }
| SettingsNode::String { name, .. }
| SettingsNode::List { name, .. }
| SettingsNode::Raw { name, .. } => name,
}
}
}