mod err;
mod eval;
mod expression;
mod value;
pub use crate::eval::Cco;
pub use err::{Error, ErrorKind};
pub use value::{Value, ValueKind};
#[derive(Clone)]
pub struct Document {
pub source: String,
pub file_name: FileName,
}
impl Document {
pub fn new(source: String) -> Self {
Self {
file_name: FileName::HclExpression,
source,
}
}
pub fn new_file(source: String, file_path: std::path::PathBuf) -> Self {
Self {
file_name: FileName::File(file_path),
source,
}
}
pub fn name(&self) -> String {
match &self.file_name {
FileName::File(path) => path.to_str().unwrap_or("<invalid utf-8>").to_string(),
FileName::HclExpression => "hcl expression".to_string(),
}
}
}
impl PartialEq for Document {
fn eq(&self, other: &Self) -> bool {
match (&self.file_name, &other.file_name) {
(FileName::File(a), FileName::File(b)) => a == b,
(FileName::HclExpression, FileName::HclExpression) => true,
_ => false,
}
}
}
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub enum FileName {
HclExpression,
File(std::path::PathBuf),
}
#[derive(Default, Debug)]
pub struct LoadOptions {
pub format: LoadFormat,
pub mode: LoadMode,
}
#[derive(Default, Debug)]
pub enum LoadFormat {
#[default]
Hcl,
}
#[derive(Default, Debug)]
pub enum LoadMode {
#[default]
Root,
SubKey(String),
}