use serde::{Deserialize, Serialize};
use super::ChunkedUpload;
use crate::wire::{lossy_bool, lossy_opt_u64};
#[derive(Clone, Debug, Default, PartialEq, Eq, Deserialize, Serialize)]
pub struct FilesCapabilities {
#[serde(
default,
alias = "bigfilechunking",
alias = "big_file_chunking",
deserialize_with = "lossy_bool"
)]
pub big_file_chunking: bool,
#[serde(default, deserialize_with = "lossy_bool")]
pub undelete: bool,
#[serde(default, deserialize_with = "lossy_bool")]
pub versioning: bool,
#[serde(default, alias = "chunked_upload", alias = "chunkedUpload")]
pub chunked_upload: Option<ChunkedUpload>,
#[serde(
default,
alias = "max_chunk_size",
alias = "maxChunkSize",
deserialize_with = "lossy_opt_u64"
)]
pub max_chunk_size: Option<u64>,
}
impl FilesCapabilities {
pub const fn big_file_chunking(&self) -> bool {
self.big_file_chunking
}
pub const fn undelete(&self) -> bool {
self.undelete
}
pub const fn versioning(&self) -> bool {
self.versioning
}
pub fn chunked_upload(&self) -> Option<&ChunkedUpload> {
self.chunked_upload.as_ref()
}
pub fn max_chunk_size(&self) -> Option<u64> {
self.max_chunk_size
.or_else(|| self.chunked_upload.as_ref().and_then(|c| c.max_size))
}
}