cala_ledger/ledger/
config.rs

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