mockforge_collab/
config.rs1use serde::{Deserialize, Serialize};
4use std::time::Duration;
5
6#[derive(Debug, Clone, Serialize, Deserialize)]
8pub struct CollabConfig {
9 pub jwt_secret: String,
11 pub database_url: String,
13 pub bind_address: String,
15 pub max_connections_per_workspace: usize,
17 pub event_bus_capacity: usize,
19 pub auto_commit: bool,
21 pub session_timeout: Duration,
23 pub websocket_ping_interval: Duration,
25 pub max_message_size: usize,
27}
28
29impl Default for CollabConfig {
30 fn default() -> Self {
31 Self {
32 jwt_secret: "change-me-in-production".to_string(),
33 database_url: "sqlite://mockforge-collab.db".to_string(),
34 bind_address: "127.0.0.1:8080".to_string(),
35 max_connections_per_workspace: 100,
36 event_bus_capacity: 1000,
37 auto_commit: true,
38 session_timeout: Duration::from_secs(24 * 3600), websocket_ping_interval: Duration::from_secs(30),
40 max_message_size: 1024 * 1024, }
42 }
43}
44
45impl CollabConfig {
46 pub fn from_env() -> Self {
48 Self {
49 jwt_secret: std::env::var("MOCKFORGE_JWT_SECRET")
50 .unwrap_or_else(|_| "change-me-in-production".to_string()),
51 database_url: std::env::var("MOCKFORGE_DATABASE_URL")
52 .unwrap_or_else(|_| "sqlite://mockforge-collab.db".to_string()),
53 bind_address: std::env::var("MOCKFORGE_BIND_ADDRESS")
54 .unwrap_or_else(|_| "127.0.0.1:8080".to_string()),
55 ..Default::default()
56 }
57 }
58}