2
0
Fork 0
mirror of https://git.asonix.dog/asonix/pict-rs synced 2024-11-14 00:13:59 +00:00
pict-rs/src/config/defaults.rs

200 lines
4.6 KiB
Rust
Raw Normal View History

2022-03-28 00:10:06 +00:00
use crate::{
config::primitives::{LogFormat, Targets},
serde_str::Serde,
};
use std::{net::SocketAddr, path::PathBuf};
2022-03-28 04:27:07 +00:00
#[derive(Clone, Debug, Default, serde::Serialize)]
#[serde(rename_all = "snake_case")]
2022-03-28 00:10:06 +00:00
pub(crate) struct Defaults {
server: ServerDefaults,
tracing: TracingDefaults,
old_db: OldDbDefaults,
media: MediaDefaults,
repo: RepoDefaults,
store: StoreDefaults,
}
2022-03-28 04:27:07 +00:00
#[derive(Clone, Debug, serde::Serialize)]
#[serde(rename_all = "snake_case")]
2022-03-28 00:10:06 +00:00
struct ServerDefaults {
address: SocketAddr,
worker_id: String,
2022-03-28 00:10:06 +00:00
}
2022-03-28 04:27:07 +00:00
#[derive(Clone, Debug, Default, serde::Serialize)]
#[serde(rename_all = "snake_case")]
2022-03-28 00:10:06 +00:00
struct TracingDefaults {
logging: LoggingDefaults,
console: ConsoleDefaults,
2022-03-28 04:27:07 +00:00
opentelemetry: OpenTelemetryDefaults,
2022-03-28 00:10:06 +00:00
}
2022-03-28 04:27:07 +00:00
#[derive(Clone, Debug, serde::Serialize)]
#[serde(rename_all = "snake_case")]
2022-03-28 00:10:06 +00:00
struct LoggingDefaults {
format: LogFormat,
targets: Serde<Targets>,
}
2022-03-28 04:27:07 +00:00
#[derive(Clone, Debug, serde::Serialize)]
#[serde(rename_all = "snake_case")]
2022-03-28 00:10:06 +00:00
struct ConsoleDefaults {
buffer_capacity: usize,
}
2022-03-28 04:27:07 +00:00
#[derive(Clone, Debug, serde::Serialize)]
#[serde(rename_all = "snake_case")]
struct OpenTelemetryDefaults {
service_name: String,
targets: Serde<Targets>,
}
#[derive(Clone, Debug, serde::Serialize)]
#[serde(rename_all = "snake_case")]
2022-03-28 00:10:06 +00:00
struct OldDbDefaults {
path: PathBuf,
}
2022-03-28 04:27:07 +00:00
#[derive(Clone, Debug, serde::Serialize)]
#[serde(rename_all = "snake_case")]
2022-03-28 00:10:06 +00:00
struct MediaDefaults {
max_width: usize,
max_height: usize,
max_area: usize,
max_file_size: usize,
2022-09-25 22:36:07 +00:00
max_frame_count: usize,
2022-03-28 00:10:06 +00:00
enable_silent_video: bool,
2022-09-25 22:36:07 +00:00
enable_full_video: bool,
2022-03-28 00:10:06 +00:00
filters: Vec<String>,
skip_validate_imports: bool,
cache_duration: i64,
2022-03-28 00:10:06 +00:00
}
2022-03-28 04:27:07 +00:00
#[derive(Clone, Debug, serde::Serialize)]
#[serde(rename_all = "snake_case")]
2022-03-28 00:10:06 +00:00
#[serde(tag = "type")]
enum RepoDefaults {
Sled(SledDefaults),
}
2022-03-28 04:27:07 +00:00
#[derive(Clone, Debug, serde::Serialize)]
#[serde(rename_all = "snake_case")]
2022-03-28 00:10:06 +00:00
struct SledDefaults {
path: PathBuf,
cache_capacity: u64,
}
2022-03-28 04:27:07 +00:00
#[derive(Clone, Debug, serde::Serialize)]
#[serde(rename_all = "snake_case")]
2022-03-28 00:10:06 +00:00
#[serde(tag = "type")]
enum StoreDefaults {
Filesystem(FilesystemDefaults),
}
2022-03-28 04:27:07 +00:00
#[derive(Clone, Debug, serde::Serialize)]
#[serde(rename_all = "snake_case")]
2022-03-28 00:10:06 +00:00
struct FilesystemDefaults {
path: PathBuf,
}
impl Default for ServerDefaults {
fn default() -> Self {
ServerDefaults {
address: "0.0.0.0:8080".parse().expect("Valid address string"),
worker_id: String::from("pict-rs-1"),
2022-03-28 00:10:06 +00:00
}
}
}
impl Default for LoggingDefaults {
fn default() -> Self {
LoggingDefaults {
format: LogFormat::Normal,
targets: "warn,tracing_actix_web=info,actix_web=info,actix_server=info"
.parse()
.expect("Valid targets string"),
2022-03-28 00:10:06 +00:00
}
}
}
impl Default for ConsoleDefaults {
fn default() -> Self {
ConsoleDefaults {
buffer_capacity: 1024 * 100,
}
}
}
2022-03-28 04:27:07 +00:00
impl Default for OpenTelemetryDefaults {
fn default() -> Self {
OpenTelemetryDefaults {
service_name: String::from("pict-rs"),
targets: "info".parse().expect("Valid targets string"),
}
}
}
2022-03-28 00:10:06 +00:00
impl Default for OldDbDefaults {
fn default() -> Self {
OldDbDefaults {
path: PathBuf::from(String::from("/mnt")),
}
}
}
impl Default for MediaDefaults {
fn default() -> Self {
MediaDefaults {
max_width: 10_000,
max_height: 10_000,
max_area: 40_000_000,
max_file_size: 40,
max_frame_count: 900,
2022-03-28 00:10:06 +00:00
enable_silent_video: true,
2022-09-25 22:36:07 +00:00
enable_full_video: false,
2022-03-28 00:10:06 +00:00
filters: vec![
"blur".into(),
"crop".into(),
2022-03-28 00:10:06 +00:00
"identity".into(),
"resize".into(),
"thumbnail".into(),
2022-03-28 00:10:06 +00:00
],
skip_validate_imports: false,
// one week (in hours)
cache_duration: 24 * 7,
2022-03-28 00:10:06 +00:00
}
}
}
impl Default for RepoDefaults {
fn default() -> Self {
Self::Sled(SledDefaults::default())
}
}
impl Default for SledDefaults {
fn default() -> Self {
SledDefaults {
path: PathBuf::from(String::from("/mnt/sled-repo")),
cache_capacity: 1024 * 1024 * 64,
}
}
}
impl Default for StoreDefaults {
fn default() -> Self {
Self::Filesystem(FilesystemDefaults::default())
}
}
impl Default for FilesystemDefaults {
fn default() -> Self {
Self {
path: PathBuf::from(String::from("/mnt/files")),
}
}
}