centaurus 0.17.4

A utility library for various use cases.
Documentation
use serde::{Deserialize, Serialize};
use tracing::warn;

#[derive(Deserialize, Serialize, Clone, Debug)]
pub struct DBConfig {
  pub database_max_connections: u32,
  pub database_min_connections: u32,
  pub database_connect_timeout: u64,
  pub database_logging: bool,
}

impl Default for DBConfig {
  fn default() -> Self {
    Self {
      database_max_connections: 20,
      database_min_connections: 1,
      database_connect_timeout: 5,
      database_logging: false,
    }
  }
}

impl DBConfig {
  pub fn validate_sqlite(&mut self) {
    if self.database_max_connections > 1 {
      self.database_max_connections = 1;
      if self.database_max_connections != DBConfig::default().database_max_connections {
        warn!(
          "SQLite does not work properly with multiple connections. Setting DATABASE_MAX_CONNECTIONS to 1."
        );
      }
    }

    if self.database_min_connections > 1 {
      self.database_min_connections = 1;
      if self.database_min_connections != DBConfig::default().database_min_connections {
        warn!(
          "SQLite does not work properly with multiple connections. Setting DATABASE_MIN_CONNECTIONS to 1."
        );
      }
    }
  }
}

#[cfg(test)]
mod tests {
  use super::*;

  #[test]
  fn test_db_config_default() {
    let config = DBConfig::default();
    assert_eq!(config.database_max_connections, 20);
  }

  #[test]
  fn test_validate_sqlite() {
    let mut config = DBConfig {
      database_max_connections: 5,
      database_min_connections: 5,
      ..Default::default()
    };
    config.validate_sqlite();
    assert_eq!(config.database_max_connections, 1);
    assert_eq!(config.database_min_connections, 1);
  }
}