Skip to main content

coil_template/model/
template.rs

1use super::*;
2
3#[derive(Debug, Clone, Copy, PartialEq, Eq)]
4pub enum TemplateKind {
5    Layout,
6    Fragment,
7}
8
9impl fmt::Display for TemplateKind {
10    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
11        match self {
12            Self::Layout => f.write_str("layout"),
13            Self::Fragment => f.write_str("fragment"),
14        }
15    }
16}
17
18#[derive(Debug, Clone, PartialEq, Eq)]
19pub struct TemplateSelector {
20    name: TemplateName,
21}
22
23impl TemplateSelector {
24    pub fn new(name: TemplateName) -> Self {
25        Self { name }
26    }
27
28    pub fn name(&self) -> &TemplateName {
29        &self.name
30    }
31}
32
33#[derive(Debug, Clone, PartialEq, Eq)]
34pub struct TemplateDefinition {
35    pub key: TemplateKey,
36    pub kind: TemplateKind,
37    pub nodes: Vec<Node>,
38}
39
40impl TemplateDefinition {
41    pub fn layout(namespace: TemplateNamespace, name: TemplateName, nodes: Vec<Node>) -> Self {
42        Self {
43            key: TemplateKey::new(namespace, name),
44            kind: TemplateKind::Layout,
45            nodes,
46        }
47    }
48
49    pub fn fragment(namespace: TemplateNamespace, name: TemplateName, nodes: Vec<Node>) -> Self {
50        Self {
51            key: TemplateKey::new(namespace, name),
52            kind: TemplateKind::Fragment,
53            nodes,
54        }
55    }
56}