baobao_codegen/
types.rs

1//! Types for code generation.
2
3use baobao_core::ContextFieldType;
4
5/// Info about a command for code generation
6#[derive(Debug, Clone)]
7pub struct CommandInfo {
8    pub name: String,
9    pub description: String,
10    pub has_subcommands: bool,
11}
12
13/// Info about a context field for code generation
14#[derive(Debug, Clone)]
15pub struct ContextFieldInfo {
16    pub name: String,
17    /// Language-agnostic field type
18    pub field_type: ContextFieldType,
19    pub env_var: String,
20    pub is_async: bool,
21    pub pool: PoolConfigInfo,
22    pub sqlite: Option<SqliteConfigInfo>,
23}
24
25/// Pool configuration for code generation
26#[derive(Debug, Clone, Default)]
27pub struct PoolConfigInfo {
28    pub max_connections: Option<u32>,
29    pub min_connections: Option<u32>,
30    pub acquire_timeout: Option<u64>,
31    pub idle_timeout: Option<u64>,
32    pub max_lifetime: Option<u64>,
33}
34
35impl PoolConfigInfo {
36    pub fn has_config(&self) -> bool {
37        self.max_connections.is_some()
38            || self.min_connections.is_some()
39            || self.acquire_timeout.is_some()
40            || self.idle_timeout.is_some()
41            || self.max_lifetime.is_some()
42    }
43}
44
45/// SQLite-specific configuration for code generation
46#[derive(Debug, Clone, Default)]
47pub struct SqliteConfigInfo {
48    /// Direct file path (e.g., "db.sqlite") - takes precedence over env var
49    pub path: Option<String>,
50    pub create_if_missing: Option<bool>,
51    pub read_only: Option<bool>,
52    pub journal_mode: Option<String>,
53    pub synchronous: Option<String>,
54    pub busy_timeout: Option<u64>,
55    pub foreign_keys: Option<bool>,
56}
57
58impl SqliteConfigInfo {
59    pub fn has_config(&self) -> bool {
60        self.create_if_missing.is_some()
61            || self.read_only.is_some()
62            || self.journal_mode.is_some()
63            || self.synchronous.is_some()
64            || self.busy_timeout.is_some()
65            || self.foreign_keys.is_some()
66    }
67}