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}