Rename VorbisComments::remove_key, make it return an iterator

This commit is contained in:
Serial 2022-04-04 20:46:22 -04:00
parent afd1a6d8ef
commit 065c70b176
No known key found for this signature in database
GPG key ID: DA95198DC17C4568
2 changed files with 16 additions and 5 deletions

View file

@ -36,7 +36,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- **MP4**: Renamed `AdvisoryRating::None` to `AdvisoryRating::Inoffensive`
- Renamed `TaggedFile::remove_tag` to `TaggedFile::take`
- **Vorbis Comments**: `VorbisComments::insert_picture` now accepts a user provided `PictureInformation`
- **Vorbis Comments**: Rename `VorbisComments::{get_item, insert_item}` to `VorbisComments::{get, insert}`
- **Vorbis Comments**: Rename `VorbisComments::{get_item, insert_item, remove_key}` to `VorbisComments::{get, insert, remove}`
- **Vorbis Comments**: `VorbisComments::remove` now returns an iterator over the removed items
### Fixed
- **MP4**: Non-full `meta` atoms are now properly handled.

View file

@ -26,7 +26,7 @@ macro_rules! impl_accessor {
}
fn [<remove_ $name>](&mut self) {
self.remove_key($key)
let _ = self.remove($key);
}
)+
}
@ -92,11 +92,21 @@ impl VorbisComments {
self.items.push((key, value))
}
/// Removes an item by key
/// Removes all items with a key, returning an iterator
///
/// NOTE: This is case-sensitive
pub fn remove_key(&mut self, key: &str) {
self.items.retain(|(k, _)| k != key);
pub fn remove(&mut self, key: &str) -> impl Iterator<Item = String> + '_ {
// TODO: drain_filter
let mut split_idx = 0_usize;
for read_idx in 0..self.items.len() {
if self.items[read_idx].0 == key {
self.items.swap(split_idx, read_idx);
split_idx += 1;
}
}
self.items.drain(..split_idx).map(|(_, v)| v)
}
/// Inserts a [`Picture`]