fastn_resolved/
record.rs

1#[derive(Debug, Default, Clone, PartialEq, serde::Deserialize, serde::Serialize)]
2pub struct Record {
3    pub name: String,
4    pub fields: Vec<fastn_resolved::Field>,
5    pub line_number: usize,
6}
7
8impl Record {
9    pub fn new(name: &str, fields: Vec<Field>, line_number: usize) -> Record {
10        Record {
11            name: name.to_string(),
12            fields,
13            line_number,
14        }
15    }
16}
17#[derive(Debug, Clone, PartialEq, serde::Deserialize, serde::Serialize)]
18pub struct Field {
19    pub name: String,
20    pub kind: fastn_resolved::KindData,
21    pub mutable: bool,
22    pub value: Option<fastn_resolved::PropertyValue>,
23    pub line_number: usize,
24    pub access_modifier: AccessModifier,
25}
26
27impl Field {
28    pub fn new(
29        name: &str,
30        kind: fastn_resolved::KindData,
31        mutable: bool,
32        value: Option<fastn_resolved::PropertyValue>,
33        line_number: usize,
34    ) -> Field {
35        Field {
36            name: name.to_string(),
37            kind,
38            mutable,
39            value,
40            line_number,
41            access_modifier: Default::default(),
42        }
43    }
44
45    pub fn to_sources(&self) -> Vec<fastn_resolved::PropertySource> {
46        let mut sources = vec![fastn_resolved::PropertySource::Header {
47            name: self.name.to_string(),
48            mutable: self.mutable,
49        }];
50        if self.is_caption() {
51            sources.push(fastn_resolved::PropertySource::Caption);
52        }
53
54        if self.is_body() {
55            sources.push(fastn_resolved::PropertySource::Body);
56        }
57
58        if self.is_subsection_ui() {
59            sources.push(fastn_resolved::PropertySource::Subsection);
60        }
61
62        sources
63    }
64
65    pub fn default(name: &str, kind: fastn_resolved::KindData) -> fastn_resolved::Field {
66        fastn_resolved::Field {
67            name: name.to_string(),
68            kind,
69            mutable: false,
70            value: None,
71            line_number: 0,
72            access_modifier: Default::default(),
73        }
74    }
75
76    pub fn default_with_value(
77        name: &str,
78        kind: fastn_resolved::KindData,
79        value: fastn_resolved::PropertyValue,
80    ) -> Field {
81        Field {
82            name: name.to_string(),
83            kind,
84            mutable: false,
85            value: Some(value),
86            line_number: 0,
87            access_modifier: Default::default(),
88        }
89    }
90
91    pub fn is_caption(&self) -> bool {
92        self.kind.caption
93    }
94
95    pub fn is_subsection_ui(&self) -> bool {
96        self.kind.kind.clone().inner_list().is_subsection_ui()
97    }
98
99    pub fn is_body(&self) -> bool {
100        self.kind.body
101    }
102
103    pub fn is_value_required(&self) -> bool {
104        if self.kind.is_optional() || self.kind.is_list() {
105            return false;
106        }
107        self.value.is_none()
108    }
109}
110
111#[derive(Debug, Default, PartialEq, Clone, serde::Serialize, serde::Deserialize)]
112pub enum AccessModifier {
113    #[default]
114    Public,
115    Private,
116}
117
118impl AccessModifier {
119    pub fn is_public(&self) -> bool {
120        matches!(self, AccessModifier::Public)
121    }
122}