rbatis_codegen/codegen/syntax_tree_html/
mod.rs1use proc_macro2::TokenStream;
2use crate::codegen::loader_html::Element;
3
4pub mod sql_tag_node;
5pub mod include_tag_node;
6pub mod mapper_tag_node;
7pub mod if_tag_node;
8pub mod trim_tag_node;
9pub mod bind_tag_node;
10pub mod where_tag_node;
11pub mod choose_tag_node;
12pub mod when_tag_node;
13pub mod otherwise_tag_node;
14pub mod foreach_tag_node;
15pub mod set_tag_node;
16pub mod continue_tag_node;
17pub mod break_tag_node;
18pub mod select_tag_node;
19pub mod update_tag_node;
20pub mod insert_tag_node;
21pub mod delete_tag_node;
22
23pub use sql_tag_node::SqlTagNode;
25pub use include_tag_node::IncludeTagNode;
26pub use mapper_tag_node::MapperTagNode;
27pub use if_tag_node::IfTagNode;
28pub use trim_tag_node::TrimTagNode;
29pub use bind_tag_node::BindTagNode;
30pub use where_tag_node::WhereTagNode;
31pub use choose_tag_node::ChooseTagNode;
32pub use when_tag_node::WhenTagNode;
33pub use otherwise_tag_node::OtherwiseTagNode;
34pub use foreach_tag_node::ForeachTagNode;
35pub use set_tag_node::SetTagNode;
36pub use continue_tag_node::ContinueTagNode;
37pub use break_tag_node::BreakTagNode;
38pub use select_tag_node::SelectTagNode;
39pub use update_tag_node::UpdateTagNode;
40pub use insert_tag_node::InsertTagNode;
41pub use delete_tag_node::DeleteTagNode;
42
43pub struct NodeContext<'a, FChildParser>
46where
47 FChildParser: FnMut(&[Element], &mut TokenStream, &mut Vec<String>, &str) -> TokenStream,
48{
49 pub methods: &'a mut TokenStream, pub fn_name: &'a str, pub child_parser: FChildParser, }
53
54impl<'a, FChildParser> NodeContext<'a, FChildParser>
55where
56 FChildParser: FnMut(&[Element], &mut TokenStream, &mut Vec<String>, &str) -> TokenStream,
57{
58 pub fn parse_children(&mut self, children: &[Element], ignore: &mut Vec<String>) -> TokenStream {
61 (self.child_parser)(children, self.methods, ignore, self.fn_name)
62 }
63}
64
65pub trait HtmlAstNode {
68 fn node_tag_name() -> &'static str;
70
71 fn from_element(element: &Element) -> Self
75 where
76 Self: Sized;
77
78 fn generate_tokens<FChildParser>(&self, context: &mut NodeContext<FChildParser>, ignore: &mut Vec<String>) -> TokenStream
81 where
82 FChildParser: FnMut(&[Element], &mut TokenStream, &mut Vec<String>, &str) -> TokenStream;
83}