obscura-server 0.1.0

A server for relaying secure messages using the Signal Protocol
Documentation
use clap::Parser;

const DEFAULT_RATE_LIMIT_PER_SECOND: u32 = 5;
const DEFAULT_RATE_LIMIT_BURST: u32 = 10;
const DEFAULT_SERVER_HOST: &str = "0.0.0.0";
const DEFAULT_SERVER_PORT: u16 = 3000;
const DEFAULT_MESSAGE_TTL_DAYS: i64 = 30;
const DEFAULT_MAX_INBOX_SIZE: i64 = 1000;
const DEFAULT_MESSAGE_CLEANUP_INTERVAL_SECS: u64 = 300;
const DEFAULT_NOTIFICATION_GC_INTERVAL_SECS: u64 = 60;
const DEFAULT_NOTIFICATION_CHANNEL_CAPACITY: usize = 16;

#[derive(Clone, Debug, Parser)]
#[command(version, about, long_about = None)]
pub struct Config {
    #[arg(long, env)]
    pub database_url: String,

    #[arg(long, env)]
    pub jwt_secret: String,

    #[arg(long, env, default_value_t = DEFAULT_RATE_LIMIT_PER_SECOND)]
    pub rate_limit_per_second: u32,

    #[arg(long, env, default_value_t = DEFAULT_RATE_LIMIT_BURST)]
    pub rate_limit_burst: u32,

    #[arg(long, env, default_value = DEFAULT_SERVER_HOST)]
    pub server_host: String,

    #[arg(long, env = "PORT", default_value_t = DEFAULT_SERVER_PORT)]
    pub server_port: u16,

    #[arg(long, env, default_value_t = DEFAULT_MESSAGE_TTL_DAYS)]
    pub message_ttl_days: i64,

    #[arg(long, env, default_value_t = DEFAULT_MAX_INBOX_SIZE)]
    pub max_inbox_size: i64,

    #[arg(long, env, default_value_t = DEFAULT_MESSAGE_CLEANUP_INTERVAL_SECS)]
    pub message_cleanup_interval_secs: u64,

    #[arg(long, env, default_value_t = DEFAULT_NOTIFICATION_GC_INTERVAL_SECS)]
    pub notification_gc_interval_secs: u64,

    #[arg(long, env, default_value_t = DEFAULT_NOTIFICATION_CHANNEL_CAPACITY)]
    pub notification_channel_capacity: usize,
}

impl Config {
    pub fn load() -> Self {
        Self::parse()
    }
}