1use syn::*;
3use crate::{ast::StmtTempl, file::File, metadata::Metadata};
4mod validate;
5
6#[derive(Debug)]
8pub struct Template {
9 name: Ident,
10 meta: Metadata,
11 file: File,
12}
13
14impl Template {
15 pub fn new(name: Ident, meta: Metadata, file: File) -> Result<Self> {
17 let mut me = Self { name, meta, file };
18 validate::validate(&mut me)?;
19 Ok(me)
20 }
21
22 pub(crate) fn stmts(&self) -> &[StmtTempl] {
24 match self.meta.block() {
25 Some(block) => match self.file.get_block(block) {
26 Some(block) => &block.stmts,
27 None => panic!("[BUG] validation missed, selected block missing"),
28 },
29 None => self.file.stmts(),
30 }
31 }
32
33 pub fn all_stmts(&self) -> &[StmtTempl] {
35 self.file.stmts()
36 }
37
38 pub fn name(&self) -> &Ident {
42 &self.name
43 }
44
45 pub fn meta(&self) -> &Metadata {
47 &self.meta
48 }
49
50 pub fn file(&self) -> &File {
52 &self.file
53 }
54
55 pub fn into_parts(self) -> (Metadata, File) {
57 (self.meta,self.file)
58 }
59}
60