Add description strings for some errors
This commit is contained in:
parent
2bf7a1db2d
commit
5a6feec1d6
|
@ -51,14 +51,16 @@ pub fn write_cue_sheet(img_path: &String, metadata: &NrgMetadata)
|
||||||
let img_name = PathBuf::from(img_path);
|
let img_name = PathBuf::from(img_path);
|
||||||
let img_name = match img_name.file_name() {
|
let img_name = match img_name.file_name() {
|
||||||
Some(name) => name,
|
Some(name) => name,
|
||||||
None => return Err(NrgError::FileName),
|
None => return Err(NrgError::FileName(img_path.clone())),
|
||||||
};
|
};
|
||||||
|
|
||||||
// Set the cue sheet file's name
|
// Set the cue sheet file's name
|
||||||
let mut cue_name = PathBuf::from(img_name);
|
let mut cue_name = PathBuf::from(img_name);
|
||||||
if cue_name.extension().unwrap_or(OsStr::new("")) == "cue" {
|
if cue_name.extension().unwrap_or(OsStr::new("")) == "cue" {
|
||||||
// img_path's extension was already .cue: problem!
|
// img_path's extension was already .cue: problem!
|
||||||
return Err(NrgError::FileName);
|
return Err(NrgError::FileName("Input and output file are identical"
|
||||||
|
.to_string()));
|
||||||
|
|
||||||
}
|
}
|
||||||
cue_name.set_extension("cue");
|
cue_name.set_extension("cue");
|
||||||
|
|
||||||
|
|
37
src/error.rs
37
src/error.rs
|
@ -32,11 +32,10 @@ use std::io;
|
||||||
pub enum NrgError {
|
pub enum NrgError {
|
||||||
Io(io::Error),
|
Io(io::Error),
|
||||||
String(ffi::IntoStringError),
|
String(ffi::IntoStringError),
|
||||||
NrgFormat,
|
NrgFormat(String),
|
||||||
NrgFormatV1,
|
NrgChunkId(String),
|
||||||
NrgChunkId,
|
|
||||||
NoNrgCue,
|
NoNrgCue,
|
||||||
FileName,
|
FileName(String),
|
||||||
AudioReadError,
|
AudioReadError,
|
||||||
AudioWriteError,
|
AudioWriteError,
|
||||||
}
|
}
|
||||||
|
@ -46,13 +45,15 @@ impl fmt::Display for NrgError {
|
||||||
match *self {
|
match *self {
|
||||||
NrgError::Io(ref err) => err.fmt(f),
|
NrgError::Io(ref err) => err.fmt(f),
|
||||||
NrgError::String(ref err) => err.fmt(f),
|
NrgError::String(ref err) => err.fmt(f),
|
||||||
NrgError::NrgFormat => write!(f, "NRG format unknown."),
|
NrgError::NrgFormat(ref err) =>
|
||||||
NrgError::NrgFormatV1 => write!(f, "NRG v1 format is not handled."),
|
write!(f, "NRG format error: {}", err),
|
||||||
NrgError::NrgChunkId => write!(f, "NRG chunk ID unknown."),
|
NrgError::NrgChunkId(ref err) =>
|
||||||
NrgError::NoNrgCue => write!(f, "NRG cue sheet chunk absent."),
|
write!(f, "NRG chunk ID unknown: {}", err),
|
||||||
NrgError::FileName => write!(f, "Invalid file name."),
|
NrgError::NoNrgCue => write!(f, "NRG cue sheet chunk absent"),
|
||||||
NrgError::AudioReadError => write!(f, "Error reading raw audio."),
|
NrgError::FileName(ref err) =>
|
||||||
NrgError::AudioWriteError => write!(f, "Error writing raw audio."),
|
write!(f, "Invalid file name: {}", err),
|
||||||
|
NrgError::AudioReadError => write!(f, "Error reading raw audio"),
|
||||||
|
NrgError::AudioWriteError => write!(f, "Error writing raw audio"),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -62,11 +63,10 @@ impl Error for NrgError {
|
||||||
match *self {
|
match *self {
|
||||||
NrgError::Io(ref err) => err.description(),
|
NrgError::Io(ref err) => err.description(),
|
||||||
NrgError::String(ref err) => err.description(),
|
NrgError::String(ref err) => err.description(),
|
||||||
NrgError::NrgFormat => "NRG format",
|
NrgError::NrgFormat(_) => "NRG format",
|
||||||
NrgError::NrgFormatV1 => "NRG format v1",
|
NrgError::NrgChunkId(_) => "NRG chunk ID",
|
||||||
NrgError::NrgChunkId => "NRG chunk ID",
|
|
||||||
NrgError::NoNrgCue => "No NRG cue",
|
NrgError::NoNrgCue => "No NRG cue",
|
||||||
NrgError::FileName => "File name",
|
NrgError::FileName(_) => "File name",
|
||||||
NrgError::AudioReadError => "Audio read error",
|
NrgError::AudioReadError => "Audio read error",
|
||||||
NrgError::AudioWriteError => "Audio write error",
|
NrgError::AudioWriteError => "Audio write error",
|
||||||
}
|
}
|
||||||
|
@ -76,11 +76,10 @@ impl Error for NrgError {
|
||||||
match *self {
|
match *self {
|
||||||
NrgError::Io(ref err) => Some(err),
|
NrgError::Io(ref err) => Some(err),
|
||||||
NrgError::String(ref err) => Some(err),
|
NrgError::String(ref err) => Some(err),
|
||||||
NrgError::NrgFormat => None,
|
NrgError::NrgFormat(_) => None,
|
||||||
NrgError::NrgFormatV1 => None,
|
NrgError::NrgChunkId(_) => None,
|
||||||
NrgError::NrgChunkId => None,
|
|
||||||
NrgError::NoNrgCue => None,
|
NrgError::NoNrgCue => None,
|
||||||
NrgError::FileName => None,
|
NrgError::FileName(_) => None,
|
||||||
NrgError::AudioReadError => None,
|
NrgError::AudioReadError => None,
|
||||||
NrgError::AudioWriteError => None,
|
NrgError::AudioWriteError => None,
|
||||||
}
|
}
|
||||||
|
|
|
@ -56,7 +56,8 @@ pub fn read_nrg_metadata(fd: &mut File) -> Result<NrgMetadata, NrgError> {
|
||||||
nm.nrg_version = try!(read_nrg_version(fd, nm.file_size));
|
nm.nrg_version = try!(read_nrg_version(fd, nm.file_size));
|
||||||
if nm.nrg_version != 2 {
|
if nm.nrg_version != 2 {
|
||||||
// We handle only NRG v2
|
// We handle only NRG v2
|
||||||
return Err(NrgError::NrgFormatV1);
|
return Err(NrgError::NrgFormat(
|
||||||
|
"NRG v1 format is not handled".to_string()));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Read the first chunk offset
|
// Read the first chunk offset
|
||||||
|
@ -78,7 +79,8 @@ pub fn read_nrg_metadata(fd: &mut File) -> Result<NrgMetadata, NrgError> {
|
||||||
fn read_nrg_version(fd: &mut File, file_size: u64) -> Result<u8, NrgError> {
|
fn read_nrg_version(fd: &mut File, file_size: u64) -> Result<u8, NrgError> {
|
||||||
if file_size < 12 {
|
if file_size < 12 {
|
||||||
// Input file too small
|
// Input file too small
|
||||||
return Err(NrgError::NrgFormat);
|
return Err(NrgError::NrgFormat(
|
||||||
|
"Input file is to small to be an NRG image".to_string()));
|
||||||
}
|
}
|
||||||
|
|
||||||
// In NRG v2, the main footer is on the last 12 bytes
|
// In NRG v2, the main footer is on the last 12 bytes
|
||||||
|
@ -95,7 +97,7 @@ fn read_nrg_version(fd: &mut File, file_size: u64) -> Result<u8, NrgError> {
|
||||||
return Ok(1); // NRG v1
|
return Ok(1); // NRG v1
|
||||||
}
|
}
|
||||||
|
|
||||||
Err(NrgError::NrgFormat) // Unknown format
|
Err(NrgError::NrgFormat("Unknown format".to_string()))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -131,7 +133,7 @@ fn read_nrg_chunks(fd: &mut File, nm: &mut NrgMetadata) -> Result<(), NrgError>
|
||||||
try!(skip_chunk(fd));
|
try!(skip_chunk(fd));
|
||||||
nm.skipped_chunks.push(chunk_id);
|
nm.skipped_chunks.push(chunk_id);
|
||||||
},
|
},
|
||||||
_ => { println!("{}", chunk_id); return Err(NrgError::NrgChunkId); }, //fixme
|
_ => return Err(NrgError::NrgChunkId(chunk_id)),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Ok(())
|
Ok(())
|
||||||
|
|
|
@ -96,12 +96,13 @@ pub fn extract_nrg_raw_audio(in_fd: &mut File,
|
||||||
fn make_output_file_name(img_path: &String) -> Result<String, NrgError> {
|
fn make_output_file_name(img_path: &String) -> Result<String, NrgError> {
|
||||||
let mut name = PathBuf::from(img_path);
|
let mut name = PathBuf::from(img_path);
|
||||||
name.set_extension("raw");
|
name.set_extension("raw");
|
||||||
let name = PathBuf::from(name);
|
let name = try!(name.file_name().ok_or(
|
||||||
let name = try!(name.file_name().ok_or(NrgError::FileName));
|
NrgError::FileName(name.to_string_lossy().into_owned())));
|
||||||
|
|
||||||
// Make sure the new name and the original name are different
|
// Make sure the new name and the original name are different
|
||||||
if name == img_path.as_str() {
|
if name == img_path.as_str() {
|
||||||
return Err(NrgError::FileName);
|
return Err(NrgError::FileName("Input and output file are identical"
|
||||||
|
.to_string()));
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(name.to_string_lossy().into_owned())
|
Ok(name.to_string_lossy().into_owned())
|
||||||
|
|
Loading…
Reference in New Issue