e034b46
use std::sync::Arc;
use serde::{Deserialize, Serialize};
use utoipa::ToSchema;
#[derive(Debug, Clone, Copy, Default, Serialize, Deserialize, PartialEq, Eq, ToSchema)]
#[serde(rename_all = "snake_case")]
pub enum ProfileVisibility {
Public,
#[default]
RegisteredOnly,
MembersOnly,
Private,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct UserConfig {
#[serde(default = "default_max_pagination")]
pub max_profile_pagination: usize,
#[serde(default = "default_default_pagination")]
pub default_profile_pagination: usize,
#[serde(default = "default_max_username_len")]
pub max_username_len: usize,
#[serde(default = "default_min_username_len")]
pub min_username_len: usize,
#[serde(default = "default_max_display_name_len")]
pub max_display_name_len: usize,
#[serde(default = "default_max_bio_len")]
pub max_bio_len: usize,
#[serde(default = "default_max_pronouns_len")]
pub max_pronouns_len: usize,
#[serde(default = "default_max_website_len")]
pub max_website_len: usize,
#[serde(default = "default_max_location_len")]
pub max_location_len: usize,
#[serde(default = "default_max_company_len")]
pub max_company_len: usize,
#[serde(default = "default_max_meme_name_len")]
pub max_meme_name_len: usize,
#[serde(default = "default_max_recovery_codes")]
pub max_recovery_codes: usize,
#[serde(default = "default_access_key_token_bytes")]
pub access_key_token_bytes: usize,
#[serde(default = "default_ssh_key_max_per_user")]
pub ssh_key_max_per_user: usize,
#[serde(default = "default_deletion_grace_days")]
pub deletion_grace_days: i64,
#[serde(default = "default_follow_rate_limit_secs")]
pub follow_rate_limit_secs: u64,
#[serde(default = "default_block_rate_limit_secs")]
pub block_rate_limit_secs: u64,
#[serde(default = "default_report_rate_limit_secs")]
pub report_rate_limit_secs: u64,
#[serde(default = "default_unread_cache_ttl")]
pub notifications_unread_cache_ttl_secs: u64,
#[serde(default)]
pub default_visibility: ProfileVisibility,
#[serde(default = "default_default_locale")]
pub default_locale: String,
#[serde(default = "default_default_timezone")]
pub default_timezone: String,
}
fn default_max_pagination() -> usize {
100
}
fn default_default_pagination() -> usize {
20
}
fn default_max_username_len() -> usize {
64
}
fn default_min_username_len() -> usize {
1
}
fn default_max_display_name_len() -> usize {
64
}
fn default_max_bio_len() -> usize {
512
}
fn default_max_pronouns_len() -> usize {
32
}
fn default_max_website_len() -> usize {
256
}
fn default_max_location_len() -> usize {
128
}
fn default_max_company_len() -> usize {
128
}
fn default_max_meme_name_len() -> usize {
64
}
fn default_max_recovery_codes() -> usize {
10
}
fn default_access_key_token_bytes() -> usize {
32
}
fn default_ssh_key_max_per_user() -> usize {
50
}
fn default_deletion_grace_days() -> i64 {
14
}
fn default_follow_rate_limit_secs() -> u64 {
60
}
fn default_block_rate_limit_secs() -> u64 {
60
}
fn default_report_rate_limit_secs() -> u64 {
300
}
fn default_unread_cache_ttl() -> u64 {
3600
}
fn default_default_locale() -> String {
"en".to_string()
}
fn default_default_timezone() -> String {
"UTC".to_string()
}
impl Default for UserConfig {
fn default() -> Self {
Self {
max_profile_pagination: default_max_pagination(),
default_profile_pagination: default_default_pagination(),
max_username_len: default_max_username_len(),
min_username_len: default_min_username_len(),
max_display_name_len: default_max_display_name_len(),
max_bio_len: default_max_bio_len(),
max_pronouns_len: default_max_pronouns_len(),
max_website_len: default_max_website_len(),
max_location_len: default_max_location_len(),
max_company_len: default_max_company_len(),
max_meme_name_len: default_max_meme_name_len(),
max_recovery_codes: default_max_recovery_codes(),
access_key_token_bytes: default_access_key_token_bytes(),
ssh_key_max_per_user: default_ssh_key_max_per_user(),
deletion_grace_days: default_deletion_grace_days(),
follow_rate_limit_secs: default_follow_rate_limit_secs(),
block_rate_limit_secs: default_block_rate_limit_secs(),
report_rate_limit_secs: default_report_rate_limit_secs(),
notifications_unread_cache_ttl_secs: default_unread_cache_ttl(),
default_visibility: ProfileVisibility::default(),
default_locale: default_default_locale(),
default_timezone: default_default_timezone(),
}
}
}
#[allow(dead_code)]
pub type SharedUserConfig = Arc<UserConfig>;