mirror of
https://github.com/Serial-ATA/lofty-rs
synced 2024-12-14 06:32:33 +00:00
TagExt: Add a default impl for save_to_path
This commit is contained in:
parent
acb7b2482c
commit
a1b7fb7e16
8 changed files with 15 additions and 61 deletions
|
@ -10,7 +10,7 @@ use crate::traits::{Accessor, MergeTag, SplitTag, TagExt};
|
|||
|
||||
use std::borrow::Cow;
|
||||
use std::convert::TryInto;
|
||||
use std::fs::{File, OpenOptions};
|
||||
use std::fs::File;
|
||||
use std::io::Write;
|
||||
use std::ops::Deref;
|
||||
use std::path::Path;
|
||||
|
@ -289,16 +289,6 @@ impl TagExt for ApeTag {
|
|||
self.items.is_empty()
|
||||
}
|
||||
|
||||
/// Writes the tag to a path
|
||||
///
|
||||
/// # Errors
|
||||
///
|
||||
/// * `path` does not exist
|
||||
/// * See [`ApeTag::save_to`]
|
||||
fn save_to_path<P: AsRef<Path>>(&self, path: P) -> std::result::Result<(), Self::Err> {
|
||||
self.save_to(&mut OpenOptions::new().read(true).write(true).open(path)?)
|
||||
}
|
||||
|
||||
/// Write an `APE` tag to a file
|
||||
///
|
||||
/// # Errors
|
||||
|
|
|
@ -5,7 +5,7 @@ use crate::tag::{Tag, TagType};
|
|||
use crate::traits::{Accessor, MergeTag, SplitTag, TagExt};
|
||||
|
||||
use std::borrow::Cow;
|
||||
use std::fs::{File, OpenOptions};
|
||||
use std::fs::File;
|
||||
use std::io::Write;
|
||||
use std::path::Path;
|
||||
|
||||
|
@ -225,10 +225,6 @@ impl TagExt for ID3v1Tag {
|
|||
&& self.genre.is_none()
|
||||
}
|
||||
|
||||
fn save_to_path<P: AsRef<Path>>(&self, path: P) -> std::result::Result<(), Self::Err> {
|
||||
self.save_to(&mut OpenOptions::new().read(true).write(true).open(path)?)
|
||||
}
|
||||
|
||||
fn save_to(&self, file: &mut File) -> std::result::Result<(), Self::Err> {
|
||||
Into::<Id3v1TagRef<'_>>::into(self).write_to(file)
|
||||
}
|
||||
|
|
|
@ -17,7 +17,7 @@ use crate::util::text::{decode_text, TextEncoding};
|
|||
use std::borrow::Cow;
|
||||
use std::convert::TryInto;
|
||||
use std::fmt::Display;
|
||||
use std::fs::{File, OpenOptions};
|
||||
use std::fs::File;
|
||||
use std::io::{Cursor, Write};
|
||||
use std::ops::Deref;
|
||||
use std::path::Path;
|
||||
|
@ -574,10 +574,6 @@ impl TagExt for ID3v2Tag {
|
|||
self.frames.is_empty()
|
||||
}
|
||||
|
||||
fn save_to_path<P: AsRef<Path>>(&self, path: P) -> std::result::Result<(), Self::Err> {
|
||||
self.save_to(&mut OpenOptions::new().read(true).write(true).open(path)?)
|
||||
}
|
||||
|
||||
/// Writes the tag to a file
|
||||
///
|
||||
/// # Errors
|
||||
|
|
|
@ -7,7 +7,7 @@ use crate::traits::{Accessor, MergeTag, SplitTag, TagExt};
|
|||
|
||||
use std::borrow::Cow;
|
||||
use std::convert::TryFrom;
|
||||
use std::fs::{File, OpenOptions};
|
||||
use std::fs::File;
|
||||
use std::io::{Read, Seek, SeekFrom, Write};
|
||||
use std::path::Path;
|
||||
|
||||
|
@ -186,16 +186,6 @@ impl TagExt for AIFFTextChunks {
|
|||
)
|
||||
}
|
||||
|
||||
/// Writes the tag to a path
|
||||
///
|
||||
/// # Errors
|
||||
///
|
||||
/// * `path` does not exist
|
||||
/// * See [`AIFFTextChunks::save_to`]
|
||||
fn save_to_path<P: AsRef<Path>>(&self, path: P) -> std::result::Result<(), Self::Err> {
|
||||
self.save_to(&mut OpenOptions::new().read(true).write(true).open(path)?)
|
||||
}
|
||||
|
||||
fn save_to(&self, file: &mut File) -> std::result::Result<(), Self::Err> {
|
||||
AiffTextChunksRef {
|
||||
name: self.name.as_deref(),
|
||||
|
|
|
@ -7,7 +7,7 @@ use crate::tag::{try_parse_year, Tag, TagType};
|
|||
use crate::traits::{Accessor, MergeTag, SplitTag, TagExt};
|
||||
|
||||
use std::borrow::Cow;
|
||||
use std::fs::{File, OpenOptions};
|
||||
use std::fs::File;
|
||||
use std::io::Write;
|
||||
use std::path::Path;
|
||||
|
||||
|
@ -199,10 +199,6 @@ impl TagExt for RIFFInfoList {
|
|||
self.items.is_empty()
|
||||
}
|
||||
|
||||
fn save_to_path<P: AsRef<Path>>(&self, path: P) -> std::result::Result<(), Self::Err> {
|
||||
self.save_to(&mut OpenOptions::new().read(true).write(true).open(path)?)
|
||||
}
|
||||
|
||||
fn save_to(&self, file: &mut File) -> std::result::Result<(), Self::Err> {
|
||||
RIFFInfoListRef::new(self.items.iter().map(|(k, v)| (k.as_str(), v.as_str())))
|
||||
.write_to(file)
|
||||
|
|
|
@ -10,7 +10,7 @@ use crate::tag::{try_parse_year, Tag, TagType};
|
|||
use crate::traits::{Accessor, MergeTag, SplitTag, TagExt};
|
||||
|
||||
use std::borrow::Cow;
|
||||
use std::fs::{File, OpenOptions};
|
||||
use std::fs::File;
|
||||
use std::io::Write;
|
||||
use std::ops::Deref;
|
||||
use std::path::Path;
|
||||
|
@ -339,16 +339,6 @@ impl TagExt for VorbisComments {
|
|||
self.items.is_empty() && self.pictures.is_empty()
|
||||
}
|
||||
|
||||
/// Writes the tag to a path
|
||||
///
|
||||
/// # Errors
|
||||
///
|
||||
/// * `path` does not exist
|
||||
/// * See [`VorbisComments::save_to`]
|
||||
fn save_to_path<P: AsRef<Path>>(&self, path: P) -> std::result::Result<(), Self::Err> {
|
||||
self.save_to(&mut OpenOptions::new().read(true).write(true).open(path)?)
|
||||
}
|
||||
|
||||
/// Writes the tag to a file
|
||||
///
|
||||
/// # Errors
|
||||
|
|
|
@ -537,17 +537,6 @@ impl TagExt for Tag {
|
|||
self.items.is_empty() && self.pictures.is_empty()
|
||||
}
|
||||
|
||||
/// Save the `Tag` to a path
|
||||
///
|
||||
/// # Errors
|
||||
///
|
||||
/// * Path doesn't exist
|
||||
/// * Path is not writable
|
||||
/// * See [`Tag::save_to`]
|
||||
fn save_to_path<P: AsRef<Path>>(&self, path: P) -> std::result::Result<(), Self::Err> {
|
||||
self.save_to(&mut OpenOptions::new().read(true).write(true).open(path)?)
|
||||
}
|
||||
|
||||
/// Save the `Tag` to a [`File`](std::fs::File)
|
||||
///
|
||||
/// # Errors
|
||||
|
|
|
@ -132,7 +132,7 @@ use std::path::Path;
|
|||
/// This can be implemented downstream to provide a familiar interface for custom tags.
|
||||
pub trait TagExt: Accessor + Into<Tag> + Sized {
|
||||
/// The associated error which can be returned from IO operations
|
||||
type Err;
|
||||
type Err: From<std::io::Error>;
|
||||
/// The type of key used in the tag for non-mutating functions
|
||||
type RefKey<'a>
|
||||
where
|
||||
|
@ -195,7 +195,14 @@ pub trait TagExt: Accessor + Into<Tag> + Sized {
|
|||
/// * Path doesn't exist
|
||||
/// * Path is not writable
|
||||
/// * See [`TagExt::save_to`]
|
||||
fn save_to_path<P: AsRef<Path>>(&self, path: P) -> std::result::Result<(), Self::Err>;
|
||||
fn save_to_path<P: AsRef<Path>>(&self, path: P) -> std::result::Result<(), Self::Err> {
|
||||
self.save_to(
|
||||
&mut std::fs::OpenOptions::new()
|
||||
.read(true)
|
||||
.write(true)
|
||||
.open(path)?,
|
||||
)
|
||||
}
|
||||
|
||||
/// Save the tag to a [`File`]
|
||||
///
|
||||
|
|
Loading…
Reference in a new issue