cala_ledger/ledger/
config.rs

1use derive_builder::Builder;
2
3pub use crate::outbox::server::OutboxServerConfig;
4
5#[derive(Builder, Debug)]
6#[builder(build_fn(validate = "Self::validate"))]
7pub struct CalaLedgerConfig {
8    #[builder(setter(into, strip_option), default)]
9    pub(super) pg_con: Option<String>,
10    #[builder(setter(into, strip_option), default)]
11    pub(super) max_connections: Option<u32>,
12    #[builder(default)]
13    pub(super) exec_migrations: bool,
14    #[builder(setter(into, strip_option), default)]
15    pub(super) pool: Option<sqlx::PgPool>,
16    #[builder(setter(strip_option), default)]
17    pub(super) outbox: Option<OutboxServerConfig>,
18}
19
20impl CalaLedgerConfig {
21    pub fn builder() -> CalaLedgerConfigBuilder {
22        CalaLedgerConfigBuilder::default()
23    }
24}
25
26impl CalaLedgerConfigBuilder {
27    fn validate(&self) -> Result<(), String> {
28        match (self.pg_con.as_ref(), self.pool.as_ref()) {
29            (None, None) | (Some(None), None) | (None, Some(None)) => {
30                return Err("One of pg_con or pool must be set".to_string())
31            }
32            (Some(_), Some(_)) => return Err("Only one of pg_con or pool must be set".to_string()),
33            _ => (),
34        }
35        Ok(())
36    }
37}