teo_parser/ast/
handler_template_declaration.rs

1use crate::ast::doc_comment::DocComment;
2use crate::ast::decorator::Decorator;
3use crate::ast::type_expr::{TypeExpr};
4use crate::ast::identifier::Identifier;
5use crate::{declare_container_node, impl_container_node_defaults, node_child_fn, node_children_iter, node_children_iter_fn, node_optional_child_fn};
6use crate::ast::handler::{HandlerDeclaration, HandlerInputFormat};
7use crate::format::Writer;
8use crate::traits::has_availability::HasAvailability;
9use crate::traits::info_provider::InfoProvider;
10use crate::traits::write::Write;
11
12declare_container_node!(HandlerTemplateDeclaration, named, availability,
13    pub(crate) comment: Option<usize>,
14    pub(crate) identifier: usize,
15    pub(crate) input_type: Option<usize>,
16    pub(crate) output_type: usize,
17    pub input_format: HandlerInputFormat,
18    pub nonapi: bool,
19    pub(crate) decorators: Vec<usize>,
20    pub(crate) empty_decorators: Vec<usize>,
21);
22
23impl_container_node_defaults!(HandlerTemplateDeclaration, named, availability);
24
25node_children_iter!(HandlerTemplateDeclaration, Decorator, DecoratorsIter, decorators);
26
27node_children_iter!(HandlerTemplateDeclaration, Decorator, EmptyDecoratorsIter, empty_decorators);
28
29impl HandlerTemplateDeclaration {
30
31    node_optional_child_fn!(comment, DocComment);
32
33    node_child_fn!(identifier, Identifier);
34
35    node_children_iter_fn!(decorators, DecoratorsIter);
36
37    node_children_iter_fn!(empty_decorators, EmptyDecoratorsIter);
38
39    node_optional_child_fn!(input_type, TypeExpr);
40
41    node_child_fn!(output_type, TypeExpr);
42}
43
44impl InfoProvider for HandlerTemplateDeclaration {
45    fn namespace_skip(&self) -> usize {
46        1
47    }
48}
49
50impl Write for HandlerTemplateDeclaration {
51    fn write<'a>(&'a self, writer: &mut Writer<'a>) {
52        writer.write_children(self, self.children.values())
53    }
54
55    fn is_block_level_element(&self) -> bool {
56        true
57    }
58}