pub mod core;
pub mod metadata;
pub mod writing;
pub use core::*;
pub use metadata::*;
pub use writing::*;
pub trait MinimalFallback {
fn minimal_fallback(file_size_bytes: usize) -> Self;
}
#[must_use]
pub fn create_minimal_fallback<T: MinimalFallback>(file_size_bytes: usize) -> T {
T::minimal_fallback(file_size_bytes)
}
#[macro_export]
macro_rules! serialize_optional {
($state:expr, $field:expr, $name:literal) => {
if let Some(ref val) = $field {
$state.serialize_field($name, val)?;
}
};
}
#[macro_export]
macro_rules! impl_minimal_fallback {
($type:ty, _) => {
impl MinimalFallback for $type {
fn minimal_fallback(_file_size_bytes: usize) -> Self {
Self::default()
}
}
};
($type:ty, $field:ident) => {
impl MinimalFallback for $type {
fn minimal_fallback(file_size_bytes: usize) -> Self {
Self {
$field: Some(file_size_bytes),
..Default::default()
}
}
}
};
($type:ty) => {
impl MinimalFallback for $type {
fn minimal_fallback(file_size_bytes: usize) -> Self {
Self {
stream_size: Some(file_size_bytes),
..Default::default()
}
}
}
};
}