1use std::time::Duration;
2
3use anyhow::Result;
4
5use super::{
6 UserConfig,
7 env::{Env, positive},
8};
9use crate::core::server::room::{
10 DEFAULT_USER_OUTBOUND_QUEUE_BYTE_CAPACITY, DEFAULT_USER_OUTBOUND_QUEUE_CAPACITY,
11};
12
13impl UserConfig {
14 pub(super) fn from_env(env: &Env<'_>) -> Result<Self> {
15 Ok(Self {
16 room_size: env.var("ROOM_SIZE").check(positive).default(100)?,
17 timeout_ms: env.var("USER_TIMEOUT_MS").check(positive).default(10_000)?,
18 ping_interval_ms: env
19 .var("PING_INTERVAL_MS")
20 .check(positive)
21 .default(60_000)?,
22 outbound_queue_capacity: env
23 .var("USER_OUTBOUND_QUEUE_CAPACITY")
24 .check(positive)
25 .default(DEFAULT_USER_OUTBOUND_QUEUE_CAPACITY)?,
26 outbound_queue_byte_capacity: env
27 .var("USER_OUTBOUND_QUEUE_BYTE_CAPACITY")
28 .check(positive)
29 .default(DEFAULT_USER_OUTBOUND_QUEUE_BYTE_CAPACITY)?,
30 room_reservation_ttl: env
31 .var("ROOM_RESERVATION_TTL")
32 .default(Duration::from_mins(1))?,
33 })
34 }
35}