Skip to main content

schema_sql_generator/common/
generator_context.rs

1use std::cell::RefCell;
2use std::rc::Rc;
3use crate::common::sql_generator_settings::SqlGeneratorSettings;
4use crate::common::sql_writer::SqlWriter;
5
6#[derive(Clone)]
7pub struct GeneratorContext {
8    settings: Rc<SqlGeneratorSettings>,
9    writer: Rc<RefCell<SqlWriter>>,
10}
11
12impl GeneratorContext {
13    pub fn new(settings: SqlGeneratorSettings, writer: SqlWriter) -> Self {
14        Self {
15            settings: Rc::new(settings),
16            writer: Rc::new(RefCell::new(writer)),
17        }
18    }
19
20    pub fn settings(&self) -> &SqlGeneratorSettings {
21        &self.settings
22    }
23
24    pub fn shared_settings(&self) -> Rc<SqlGeneratorSettings> {
25        Rc::clone(&self.settings)
26    }
27
28    pub fn writer(&self) -> Rc<RefCell<SqlWriter>> {
29        Rc::clone(&self.writer)
30    }
31
32    pub fn with_writer<F>(&self, f: F)
33    where
34        F: FnOnce(&mut SqlWriter),
35    {
36        let mut writer = self.writer.borrow_mut();
37        f(&mut writer);
38    }
39}