mirror of
https://github.com/Serial-ATA/lofty-rs
synced 2024-12-14 06:32:33 +00:00
Update error.rs
This commit is contained in:
parent
ebc85cd207
commit
7fd326b327
2 changed files with 22 additions and 12 deletions
23
src/error.rs
23
src/error.rs
|
@ -44,15 +44,26 @@ pub enum LoftyError {
|
||||||
/// Errors that arise while decoding ID3v2 text
|
/// Errors that arise while decoding ID3v2 text
|
||||||
#[error("Text decoding: {0}")]
|
#[error("Text decoding: {0}")]
|
||||||
TextDecode(&'static str),
|
TextDecode(&'static str),
|
||||||
|
/// Errors that arise while reading/writing ID3v2 tags
|
||||||
|
#[error("ID3v2: {0}")]
|
||||||
|
Id3v2(&'static str),
|
||||||
|
/// Arises when an invalid ID3v2 version is found
|
||||||
|
#[error(
|
||||||
|
"ID3v2: Found an invalid version (v{0}.{1}), expected any major revision in: (2, 3, 4)"
|
||||||
|
)]
|
||||||
|
BadId3v2Version(u8, u8),
|
||||||
|
/// Arises when [`std::str::from_utf8`] fails to parse a frame ID
|
||||||
|
#[error("ID3v2: ")]
|
||||||
|
BadFrameID,
|
||||||
|
/// Arises when a frame doesn't have enough data
|
||||||
|
#[error("ID3v2: Frame isn't long enough to extract the necessary information")]
|
||||||
|
BadFrameLength,
|
||||||
/// Arises when invalid data is encountered while reading an ID3v2 synchronized text frame
|
/// Arises when invalid data is encountered while reading an ID3v2 synchronized text frame
|
||||||
#[error("ID3v2: Encountered invalid data in SYLT frame")]
|
#[error("ID3v2: Encountered invalid data in SYLT frame")]
|
||||||
BadSyncText,
|
BadSyncText,
|
||||||
/// Arises when invalid data is encountered while reading an ID3v2 general encapsulated object frame
|
/// Arises when a tag is expected (Ex. found an "ID3 " chunk in a WAV file), but isn't found
|
||||||
#[error("ID3v2: Encountered invalid data in GEOB frame")]
|
#[error("Reading: Expected a tag, found invalid data")]
|
||||||
BadEncapsulatedObject,
|
FakeTag,
|
||||||
/// Arists when [`std::str::from_utf8`] fails to parse a frame ID
|
|
||||||
#[error("ID3v2: Encountered an invalid frame ID")]
|
|
||||||
BadFrameID,
|
|
||||||
/// Errors that arise while reading/writing to WAV files
|
/// Errors that arise while reading/writing to WAV files
|
||||||
#[error("Riff: {0}")]
|
#[error("Riff: {0}")]
|
||||||
Wav(&'static str),
|
Wav(&'static str),
|
||||||
|
|
|
@ -4,7 +4,7 @@ use crate::types::picture::TextEncoding;
|
||||||
|
|
||||||
use std::io::{Cursor, Read};
|
use std::io::{Cursor, Read};
|
||||||
|
|
||||||
#[derive(PartialEq)]
|
#[derive(PartialEq, Clone)]
|
||||||
/// Information about a [`GeneralEncapsulatedObject`]
|
/// Information about a [`GeneralEncapsulatedObject`]
|
||||||
pub struct GEOBInformation {
|
pub struct GEOBInformation {
|
||||||
/// The text encoding of `file_name` and `description`
|
/// The text encoding of `file_name` and `description`
|
||||||
|
@ -32,21 +32,20 @@ impl GeneralEncapsulatedObject {
|
||||||
///
|
///
|
||||||
/// # Errors
|
/// # Errors
|
||||||
///
|
///
|
||||||
/// This function will return [`BadEncapsulatedObject`][LoftyError::BadEncapsulatedObject] if at any point it's unable to parse the data
|
/// This function will return an error if at any point it's unable to parse the data
|
||||||
pub fn parse(data: &[u8]) -> Result<Self> {
|
pub fn parse(data: &[u8]) -> Result<Self> {
|
||||||
if data.len() < 4 {
|
if data.len() < 4 {
|
||||||
return Err(LoftyError::BadEncapsulatedObject);
|
return Err(LoftyError::Id3v2("GEOB frame has invalid size (< 4)"));
|
||||||
}
|
}
|
||||||
|
|
||||||
let mut encoding =
|
let encoding = TextEncoding::from_u8(data[0]).ok_or(LoftyError::TextDecode("Found invalid encoding"))?;
|
||||||
TextEncoding::from_u8(data[0]).ok_or_else(|| LoftyError::BadEncapsulatedObject)?;
|
|
||||||
|
|
||||||
let mut cursor = Cursor::new(&data[1..]);
|
let mut cursor = Cursor::new(&data[1..]);
|
||||||
|
|
||||||
let mime_type = decode_text(&mut cursor, TextEncoding::Latin1, true)?;
|
let mime_type = decode_text(&mut cursor, TextEncoding::Latin1, true)?;
|
||||||
let file_name = decode_text(&mut cursor, encoding, true)?;
|
let file_name = decode_text(&mut cursor, encoding, true)?;
|
||||||
let description =
|
let description =
|
||||||
decode_text(&mut cursor, encoding, true)?.unwrap_or_else(|| String::new());
|
decode_text(&mut cursor, encoding, true)?.unwrap_or_else(String::new);
|
||||||
|
|
||||||
let mut data = Vec::new();
|
let mut data = Vec::new();
|
||||||
cursor.read_to_end(&mut data)?;
|
cursor.read_to_end(&mut data)?;
|
||||||
|
|
Loading…
Reference in a new issue