use crate::config::ParseOptions;
use std::num::NonZero;
#[derive(Copy, Clone, Debug, Eq, PartialEq)]
#[non_exhaustive]
pub struct WriteOptions {
pub(crate) preferred_padding: Option<NonZero<u32>>,
pub(crate) remove_others: bool,
pub(crate) respect_read_only: bool,
pub(crate) uppercase_id3v2_chunk: bool,
pub(crate) use_id3v23: bool,
pub(crate) lossy_text_encoding: bool,
pub(crate) parse_options: ParseOptions,
}
impl WriteOptions {
pub const DEFAULT_PREFERRED_PADDING: u32 = 1024;
pub const fn new() -> Self {
Self {
preferred_padding: NonZero::new(Self::DEFAULT_PREFERRED_PADDING),
remove_others: false,
respect_read_only: true,
uppercase_id3v2_chunk: true,
use_id3v23: false,
lossy_text_encoding: true,
parse_options: ParseOptions::new(),
}
}
pub fn preferred_padding(mut self, preferred_padding: u32) -> Self {
self.preferred_padding = NonZero::new(preferred_padding);
self
}
pub fn remove_others(mut self, remove_others: bool) -> Self {
self.remove_others = remove_others;
self
}
pub fn respect_read_only(mut self, respect_read_only: bool) -> Self {
self.respect_read_only = respect_read_only;
self
}
pub fn uppercase_id3v2_chunk(mut self, uppercase_id3v2_chunk: bool) -> Self {
self.uppercase_id3v2_chunk = uppercase_id3v2_chunk;
self
}
pub fn use_id3v23(&mut self, use_id3v23: bool) -> Self {
self.use_id3v23 = use_id3v23;
*self
}
pub fn lossy_text_encoding(&mut self, lossy_text_encoding: bool) -> Self {
self.lossy_text_encoding = lossy_text_encoding;
*self
}
pub fn parse_options(&mut self, parse_options: ParseOptions) -> Self {
self.parse_options = parse_options;
*self
}
}
impl Default for WriteOptions {
fn default() -> Self {
Self::new()
}
}