baobao_codegen/adapters/
database.rs1use baobao_core::DatabaseType;
7
8use super::cli::{Dependency, ImportSpec};
9use crate::builder::CodeFragment;
10
11#[derive(Debug, Clone, Default)]
13pub struct PoolConfig {
14 pub max_connections: Option<u32>,
16 pub min_connections: Option<u32>,
18 pub acquire_timeout: Option<u64>,
20 pub idle_timeout: Option<u64>,
22 pub max_lifetime: Option<u64>,
24}
25
26impl PoolConfig {
27 pub fn has_config(&self) -> bool {
29 self.max_connections.is_some()
30 || self.min_connections.is_some()
31 || self.acquire_timeout.is_some()
32 || self.idle_timeout.is_some()
33 || self.max_lifetime.is_some()
34 }
35}
36
37#[derive(Debug, Clone, Default)]
39pub struct SqliteConfig {
40 pub path: Option<String>,
42 pub create_if_missing: Option<bool>,
44 pub read_only: Option<bool>,
46 pub journal_mode: Option<String>,
48 pub synchronous: Option<String>,
50 pub busy_timeout: Option<u64>,
52 pub foreign_keys: Option<bool>,
54}
55
56impl SqliteConfig {
57 pub fn has_config(&self) -> bool {
59 self.create_if_missing.is_some()
60 || self.read_only.is_some()
61 || self.journal_mode.is_some()
62 || self.synchronous.is_some()
63 || self.busy_timeout.is_some()
64 || self.foreign_keys.is_some()
65 }
66}
67
68#[derive(Debug, Clone)]
70pub struct PoolInitInfo {
71 pub field_name: String,
73 pub db_type: DatabaseType,
75 pub env_var: String,
77 pub pool_config: PoolConfig,
79 pub sqlite_config: Option<SqliteConfig>,
81 pub is_async: bool,
83}
84
85#[derive(Debug, Clone)]
87pub struct DatabaseOptionsInfo {
88 pub db_type: DatabaseType,
90 pub sqlite: Option<SqliteConfig>,
92}
93
94pub trait DatabaseAdapter {
98 fn name(&self) -> &'static str;
100
101 fn dependencies(&self, db_type: DatabaseType) -> Vec<Dependency>;
103
104 fn pool_type(&self, db_type: DatabaseType) -> &'static str;
106
107 fn generate_pool_init(&self, info: &PoolInitInfo) -> Vec<CodeFragment>;
109
110 fn generate_options(&self, info: &DatabaseOptionsInfo) -> Option<Vec<CodeFragment>>;
112
113 fn imports(&self, db_type: DatabaseType) -> Vec<ImportSpec>;
115
116 fn requires_async(&self, db_type: DatabaseType) -> bool;
118}