use bytesize::ByteSize;
use schemars::JsonSchema;
use serde::Deserialize;
#[derive(Debug, Clone, Copy, Deserialize, JsonSchema)]
#[serde(deny_unknown_fields)]
pub(crate) struct MultipartRequestLimits {
pub(crate) max_files: usize,
#[serde(deserialize_with = "bytesize::ByteSize::deserialize")]
#[schemars(with = "String")]
pub(crate) max_file_size: ByteSize,
}
impl Default for MultipartRequestLimits {
fn default() -> Self {
Self {
max_files: 5,
max_file_size: ByteSize::mb(1),
}
}
}
#[derive(Debug, Clone, Default, Deserialize, JsonSchema)]
#[serde(deny_unknown_fields, rename_all = "lowercase")]
pub(crate) enum MultipartRequestMode {
#[default]
Stream,
}
#[derive(Debug, Clone, Deserialize, JsonSchema)]
#[serde(deny_unknown_fields, default)]
pub(crate) struct MultipartRequest {
pub(crate) enabled: bool,
pub(crate) mode: MultipartRequestMode,
pub(crate) limits: MultipartRequestLimits,
}
impl Default for MultipartRequest {
fn default() -> Self {
Self {
enabled: true,
mode: Default::default(),
limits: Default::default(),
}
}
}
#[derive(Debug, Clone, Default, Deserialize, JsonSchema)]
#[serde(deny_unknown_fields)]
pub(crate) struct FileUploadProtocols {
pub(crate) multipart: MultipartRequest,
}
#[derive(Debug, Clone, Default, Deserialize, JsonSchema)]
#[serde(deny_unknown_fields)]
pub(crate) struct FileUploadsConfig {
pub(crate) enabled: bool,
pub(crate) protocols: FileUploadProtocols,
}