Enum DecodingError

pub enum DecodingError

Any kind of error during PNG decoding.

This enumeration provides a very rough analysis on the origin of the failure. That is, each variant corresponds to one kind of actor causing the error. It should not be understood as a direct blame but can inform the search for a root cause or if such a search is required.

Variants

IoError(Error)

An error in IO of the underlying reader.

Note that some IO errors may be recoverable - decoding may be retried after the error is resolved. For example, decoding from a slow stream of data (e.g. decoding from a network stream) may occasionally result in [std::io::ErrorKind::UnexpectedEof] kind of error, but decoding can resume when more data becomes available.

Format(FormatError)

The input image was not a valid PNG.

There isn't a lot that can be done here, except if the program itself was responsible for creating this image then investigate the generator. This is internally implemented with a large Enum. If You are interested in accessing some of the more exact information on the variant then we can discuss in an issue.

Parameter(ParameterError)

An interface was used incorrectly.

This is used in cases where it's expected that the programmer might trip up and stability could be affected. For example when:

  • The decoder is polled for more animation frames despite being done (or not being animated in the first place).
  • The output buffer does not have the required size.

As a rough guideline for introducing new variants parts of the requirements are dynamically derived from the (untrusted) input data while the other half is from the caller. In the above cases the number of frames respectively the size is determined by the file while the number of calls

If you're an application you might want to signal that a bug report is appreciated.

LimitsExceeded

The image would have required exceeding the limits configured with the decoder.

Note that Your allocations, e.g. when reading into a pre-allocated buffer, is NOT considered part of the limits. Nevertheless, required intermediate buffers such as for singular lines is checked against the limit.

Note that this is a best-effort basis.

Trait Implementations

impl Debug for DecodingError

fn fmt(&self, f: &mut Formatter<'_>) -> Result

impl Display for DecodingError

fn fmt(&self, fmt: &mut Formatter<'_>) -> Result<(), Error>

impl Error for DecodingError

fn cause(&self) -> Option<&dyn Error + 'static>

impl From<Error> for DecodingError

fn from(err: Error) -> DecodingError

Auto Trait Implementations

impl !RefUnwindSafe for DecodingError

impl !UnwindSafe for DecodingError

impl Freeze for DecodingError

impl Send for DecodingError

impl Sync for DecodingError

impl Unpin for DecodingError

impl UnsafeUnpin for DecodingError

Blanket Implementations

impl<T> Any for DecodingError where T: 'static + ?Sized,

fn type_id(&self) -> TypeId

impl<T> Borrow<T> for DecodingError where T: ?Sized,

fn borrow(&self) -> &T

impl<T> BorrowMut<T> for DecodingError where T: ?Sized,

fn borrow_mut(&mut self) -> &mut T

impl<T> From<T> for DecodingError

fn from(t: T) -> T

Returns the argument unchanged.

impl<T> ToString for DecodingError where T: Display + ?Sized,

fn to_string(&self) -> String

impl<T, U> Into<U> for DecodingError where U: From<T>,

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of [From]<T> for U chooses to do.

impl<T, U> TryFrom<U> for DecodingError where U: Into<T>,

type Error = never;
fn try_from(value: U) -> Result<T, never>

impl<T, U> TryInto<U> for DecodingError where U: TryFrom<T>,

type Error = <U as TryFrom<T>>::Error;
fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>