Skip to main content

systemprompt_models/profile/
database.rs

1//! Database configuration.
2
3use serde::{Deserialize, Serialize};
4
5/// Operator-tunable connection-pool sizing.
6///
7/// Omitted fields fall back to the engine defaults (50 connections, 30s
8/// acquire, 300s idle, 1800s lifetime); set them to fit the pool to the
9/// deployment's Postgres `max_connections` and replica count.
10/// [`crate::profile::Profile::validate`] range-checks the values at bootstrap.
11#[derive(Debug, Clone, Copy, Default, Serialize, Deserialize, schemars::JsonSchema)]
12#[serde(deny_unknown_fields)]
13pub struct PoolConfig {
14    #[serde(default, skip_serializing_if = "Option::is_none")]
15    pub max_connections: Option<u32>,
16
17    #[serde(default, skip_serializing_if = "Option::is_none")]
18    pub acquire_timeout_secs: Option<u64>,
19
20    #[serde(default, skip_serializing_if = "Option::is_none")]
21    pub idle_timeout_secs: Option<u64>,
22
23    #[serde(default, skip_serializing_if = "Option::is_none")]
24    pub max_lifetime_secs: Option<u64>,
25}
26
27#[derive(Debug, Clone, Serialize, Deserialize, schemars::JsonSchema)]
28#[serde(deny_unknown_fields)]
29pub struct DatabaseConfig {
30    #[serde(rename = "type")]
31    pub db_type: String,
32
33    #[serde(default)]
34    pub external_db_access: bool,
35
36    #[serde(default, skip_serializing_if = "Option::is_none")]
37    pub pool: Option<PoolConfig>,
38}