mirror of
https://github.com/Serial-ATA/lofty-rs
synced 2024-11-10 06:34:18 +00:00
GlobalOptions: Add preserve_format_specific_items()
This commit is contained in:
parent
e53ca3b42d
commit
8eba1bbceb
2 changed files with 29 additions and 0 deletions
|
@ -14,6 +14,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||||
- New `tag::items` module for generic representations of complex tag items
|
- New `tag::items` module for generic representations of complex tag items
|
||||||
- New `Timestamp` item for ISO 8601 timestamps ([PR](https://github.com/Serial-ATA/lofty-rs/pull/389))
|
- New `Timestamp` item for ISO 8601 timestamps ([PR](https://github.com/Serial-ATA/lofty-rs/pull/389))
|
||||||
- **ID3v2**: Special handling for frames with timestamps with `Frame::Timestamp` ([PR](https://github.com/Serial-ATA/lofty-rs/pull/389))
|
- **ID3v2**: Special handling for frames with timestamps with `Frame::Timestamp` ([PR](https://github.com/Serial-ATA/lofty-rs/pull/389))
|
||||||
|
- **GlobalOptions**: `preserve_format_specific_items()`
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
- **VorbisComments**/**ApeTag**: Verify contents of `ItemKey::FlagCompilation` during `Tag` merge ([PR](https://github.com/Serial-ATA/lofty-rs/pull/387))
|
- **VorbisComments**/**ApeTag**: Verify contents of `ItemKey::FlagCompilation` during `Tag` merge ([PR](https://github.com/Serial-ATA/lofty-rs/pull/387))
|
||||||
|
|
|
@ -24,6 +24,7 @@ pub(crate) unsafe fn global_options() -> &'static GlobalOptions {
|
||||||
pub struct GlobalOptions {
|
pub struct GlobalOptions {
|
||||||
pub(crate) use_custom_resolvers: bool,
|
pub(crate) use_custom_resolvers: bool,
|
||||||
pub(crate) allocation_limit: usize,
|
pub(crate) allocation_limit: usize,
|
||||||
|
pub(crate) preserve_format_specific_items: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl GlobalOptions {
|
impl GlobalOptions {
|
||||||
|
@ -46,6 +47,7 @@ impl GlobalOptions {
|
||||||
Self {
|
Self {
|
||||||
use_custom_resolvers: true,
|
use_custom_resolvers: true,
|
||||||
allocation_limit: Self::DEFAULT_ALLOCATION_LIMIT,
|
allocation_limit: Self::DEFAULT_ALLOCATION_LIMIT,
|
||||||
|
preserve_format_specific_items: true,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -85,6 +87,31 @@ impl GlobalOptions {
|
||||||
self.allocation_limit = allocation_limit;
|
self.allocation_limit = allocation_limit;
|
||||||
*self
|
*self
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Whether or not to preserve format-specific items
|
||||||
|
///
|
||||||
|
/// When converting a tag from its concrete format (ex. [`Id3v2`](crate::id3::v2::Id3v2Tag)) to
|
||||||
|
/// a [`Tag`], this options controls whether to preserve any special items that
|
||||||
|
/// are unique to the concrete tag.
|
||||||
|
///
|
||||||
|
/// This will store an extra immutable tag alongside the generic [`Tag`], which will be merged
|
||||||
|
/// back into the concrete tag when converting back.
|
||||||
|
///
|
||||||
|
/// # Examples
|
||||||
|
///
|
||||||
|
/// ```rust
|
||||||
|
/// use lofty::config::{apply_global_options, GlobalOptions};
|
||||||
|
///
|
||||||
|
/// // I'm just reading tags, I don't need to preserve format-specific items
|
||||||
|
/// let global_options = GlobalOptions::new().preserve_format_specific_items(false);
|
||||||
|
/// apply_global_options(global_options);
|
||||||
|
/// ```
|
||||||
|
///
|
||||||
|
/// [Tag]: crate::tag::Tag
|
||||||
|
pub fn preserve_format_specific_items(&mut self, preserve_format_specific_items: bool) -> Self {
|
||||||
|
self.preserve_format_specific_items = preserve_format_specific_items;
|
||||||
|
*self
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Default for GlobalOptions {
|
impl Default for GlobalOptions {
|
||||||
|
@ -96,6 +123,7 @@ impl Default for GlobalOptions {
|
||||||
/// GlobalOptions {
|
/// GlobalOptions {
|
||||||
/// use_custom_resolvers: true,
|
/// use_custom_resolvers: true,
|
||||||
/// allocation_limit: Self::DEFAULT_ALLOCATION_LIMIT,
|
/// allocation_limit: Self::DEFAULT_ALLOCATION_LIMIT,
|
||||||
|
/// preserve_format_specific_items: true,
|
||||||
/// }
|
/// }
|
||||||
/// ```
|
/// ```
|
||||||
fn default() -> Self {
|
fn default() -> Self {
|
||||||
|
|
Loading…
Reference in a new issue