tank_core/writer/
context.rs

1#[derive(Default, Debug, Clone, Copy, PartialEq, Eq)]
2pub enum Fragment {
3    #[default]
4    None,
5    SqlCommentOnColumn,
6    SqlCreateSchema,
7    SqlCreateTable,
8    SqlCreateTablePrimaryKey,
9    SqlCreateTableUnique,
10    SqlDeleteFrom,
11    SqlDeleteFromWhere,
12    SqlDropSchema,
13    SqlDropTable,
14    SqlInsertInto,
15    SqlInsertIntoOnConflict,
16    SqlInsertIntoValues,
17    SqlJoin,
18    SqlSelect,
19    SqlSelectFrom,
20    SqlSelectOrderBy,
21    SqlSelectWhere,
22}
23
24#[derive(Debug, Clone, Copy, PartialEq, Eq)]
25pub struct Context {
26    pub counter: u32,
27    pub fragment: Fragment,
28    pub qualify_columns: bool,
29}
30
31impl Context {
32    pub const fn new(fragment: Fragment, qualify_columns: bool) -> Self {
33        Self {
34            counter: 0,
35            fragment,
36            qualify_columns,
37        }
38    }
39    pub const fn new_qualify(qualify_columns: bool) -> Self {
40        Self {
41            counter: 0,
42            fragment: Fragment::None,
43            qualify_columns,
44        }
45    }
46    pub const fn update_from(&mut self, context: &Context) {
47        self.counter = context.counter;
48    }
49}
50
51impl Context {
52    pub const fn switch_fragment<'s>(&'s mut self, fragment: Fragment) -> ContextUpdater<'s> {
53        ContextUpdater {
54            current: Context { fragment, ..*self },
55            previous: self,
56        }
57    }
58}
59
60impl Default for Context {
61    fn default() -> Self {
62        Context::new(Fragment::None, true)
63    }
64}
65
66pub struct ContextUpdater<'a> {
67    pub current: Context,
68    pub previous: &'a mut Context,
69}
70
71impl<'a> Drop for ContextUpdater<'a> {
72    fn drop(&mut self) {
73        self.previous.counter = self.current.counter;
74    }
75}