#[non_exhaustive]pub enum Error {
InvalidFormat(&'static str),
Io(Error),
NotFound(&'static str),
BlankValue(&'static str),
TooBig(&'static str),
NotSupported(&'static str),
UnexpectedValue(&'static str),
PartialResult(PartialResult),
}
Expand description
An error returned when parsing of Exif data fails.
Variants (Non-exhaustive)§
This enum is marked as non-exhaustive
InvalidFormat(&'static str)
Input data was malformed or truncated.
Io(Error)
Input data could not be read due to an I/O error and
a std::io::Error
value is associated with this variant.
NotFound(&'static str)
Exif attribute information was not found in an image file such as JPEG.
BlankValue(&'static str)
The value of the field is blank. Some fields have blank values whose meanings are defined as “unknown”. Such a blank value should be treated the same as the absence of the field.
TooBig(&'static str)
Field values or image data are too big to encode.
NotSupported(&'static str)
The field type is not supported and cannnot be encoded.
UnexpectedValue(&'static str)
The field has an unexpected value.
PartialResult(PartialResult)
Partially-parsed result and errors. This can be returned only when
Reader::continue_on_error
is enabled.
Implementations§
Source§impl Error
impl Error
Sourcepub fn distill_partial_result<F>(self, f: F) -> Result<Exif, Self>
pub fn distill_partial_result<F>(self, f: F) -> Result<Exif, Self>
Extracts Exif
and Vec<Error>
from Error::PartialResult
.
If self
is Error::PartialResult
,
ignored errors are passed to f
as Vec<Error>
and
partially-parsed result is retuend in Ok
.
Otherwise, Err(self)
is returned.
Examples found in repository?
42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
fn dump_file(path: &Path) -> Result<(), exif::Error> {
let file = File::open(path)?;
// To parse strictly:
// let exif = exif::Reader::new()
// .read_from_container(&mut BufReader::new(&file))?;
// To parse with continue-on-error mode:
let exif = exif::Reader::new()
.continue_on_error(true)
.read_from_container(&mut BufReader::new(&file))
.or_else(|e| e.distill_partial_result(|errors| {
eprintln!("{}: {} warning(s)", path.display(), errors.len());
errors.iter().for_each(|e| eprintln!(" {}", e));
}))?;
println!("{}", path.display());
for f in exif.fields() {
println!(" {}/{}: {}",
f.ifd_num.index(), f.tag,
f.display_value().with_unit(&exif));
println!(" {:?}", f.value);
}
Ok(())
}