1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
//! The [`Template`] struct.
use syn::*;
use crate::{ast::StmtTempl, file::File, metadata::Metadata};
mod validate;
/// Contains a single file template information.
#[derive(Debug)]
pub struct Template {
name: Ident,
meta: Metadata,
file: File,
}
impl Template {
/// Create new [`Template`].
pub fn new(name: Ident, meta: Metadata, file: File) -> Result<Self> {
let mut me = Self { name, meta, file };
validate::validate(&mut me)?;
Ok(me)
}
/// Returns selected block if any, otherwise return all statements.
pub(crate) fn stmts(&self) -> &[StmtTempl] {
match self.meta.block() {
Some(block) => match self.file.get_block(block) {
Some(block) => &block.stmts,
None => panic!("[BUG] validation missed, selected block missing"),
},
None => self.file.stmts(),
}
}
/// Returns all statements, regardles selected block.
pub fn all_stmts(&self) -> &[StmtTempl] {
self.file.stmts()
}
/// Returns template name.
///
/// Template name is from either derive macro ident, aliased, or auto generated.
pub fn name(&self) -> &Ident {
&self.name
}
/// Returns template [`Metadata`].
pub fn meta(&self) -> &Metadata {
&self.meta
}
/// Returns template [`File`].
pub fn file(&self) -> &File {
&self.file
}
/// Split template into parts.
pub fn into_parts(self) -> (Metadata, File) {
(self.meta,self.file)
}
}