pub(crate) mod reconciliation;
pub mod schema;
pub mod table;
pub use schema::{
Applicability, EffectiveNumber, NumericBounds, NumericBoundsError, SettingDefinition,
SettingEvidenceKind, SettingId, SettingIdentity, SettingOccurrence, SettingOperationError,
SettingPresentation, SettingProvenance, SettingScope, SettingTarget, SettingTargetKind,
SettingValue, SettingValueDomain, TeamId, definition, definitions, definitions_by_id,
};
use crate::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,
}
}
}