pub use crate::parser::Rule;
pub use pest::iterators::{Pair, Pairs};
pub use std::collections::HashMap;
#[derive(Debug, Clone, PartialEq)]
pub enum TemplateValue {
String(String),
Interpolation(Value),
}
#[derive(Debug, Clone, PartialEq)]
pub enum ReferenceAsValue {
Id(String),
Path(Vec<String>),
}
#[derive(Debug, Clone, PartialEq)]
pub enum Value {
Infinity,
NegativeInfinity,
Null,
NaN,
String(String),
Number(f64),
Boolean(bool),
Identifier(String),
Object(HashMap<String, Value>),
Array(Vec<Value>),
TemplateString(Vec<TemplateValue>),
Reference(ReferenceAsValue),
ReferenceDeclaration { id: String, value: Box<Value> },
}
#[derive(Debug, Clone)]
pub struct ReferencesManager {
pub refs: HashMap<String, Value>,
pub ref_paths: HashMap<String, Value>,
}
impl ReferencesManager {
pub fn get_by_path(self, path: String) -> Option<Value> {
if self.ref_paths.contains_key(&path.clone()) {
let value = &self.ref_paths[&path];
Some(value.clone())
} else {
None
}
}
pub fn get_by_id(self, id: String) -> Option<Value> {
if self.refs.contains_key(&id.clone()) {
let value = &self.refs[&id];
Some(value.clone())
} else {
None
}
}
}