Skip to main content

cco/
lib.rs

1mod err;
2mod eval;
3mod expression;
4mod value;
5
6pub use crate::eval::Cco;
7pub use err::{Error, ErrorKind};
8pub use value::{Value, ValueKind};
9
10#[derive(Clone)]
11pub struct Document {
12    pub source: String,
13    pub file_name: FileName,
14}
15
16impl Document {
17    pub fn new(source: String) -> Self {
18        Self {
19            file_name: FileName::HclExpression,
20            source,
21        }
22    }
23
24    pub fn new_file(source: String, file_path: std::path::PathBuf) -> Self {
25        Self {
26            file_name: FileName::File(file_path),
27            source,
28        }
29    }
30
31    pub fn name(&self) -> String {
32        match &self.file_name {
33            FileName::File(path) => path.to_str().unwrap_or("<invalid utf-8>").to_string(),
34            FileName::HclExpression => "hcl expression".to_string(),
35        }
36    }
37}
38
39impl PartialEq for Document {
40    fn eq(&self, other: &Self) -> bool {
41        match (&self.file_name, &other.file_name) {
42            (FileName::File(a), FileName::File(b)) => a == b,
43            (FileName::HclExpression, FileName::HclExpression) => true,
44            _ => false,
45        }
46    }
47}
48
49#[derive(Debug, Clone, PartialEq, Eq, Hash)]
50pub enum FileName {
51    HclExpression,
52    File(std::path::PathBuf),
53}
54
55#[derive(Default, Debug)]
56pub struct LoadOptions {
57    pub format: LoadFormat,
58    pub mode: LoadMode,
59}
60
61#[derive(Default, Debug)]
62pub enum LoadFormat {
63    #[default]
64    Hcl,
65}
66
67#[derive(Default, Debug)]
68pub enum LoadMode {
69    #[default]
70    Root,
71    SubKey(String),
72}