#[non_exhaustive]pub struct Limits {
    pub max_image_width: Option<u32>,
    pub max_image_height: Option<u32>,
    pub max_alloc: Option<u64>,
}Expand description
Resource limits for decoding.
Limits can be either strict or non-strict. Non-strict limits are best-effort
limits where the library does not guarantee that limit will not be exceeded. Do note
that it is still considered a bug if a non-strict limit is exceeded.
Some of the underlying decoders do not support such limits, so one cannot
rely on these limits being supported. For strict limits, the library makes a stronger
guarantee that the limit will not be exceeded. Exceeding a strict limit is considered
a critical bug. If a decoder cannot guarantee that it will uphold a strict limit, it
must fail with error::LimitErrorKind::Unsupported.
The only currently supported strict limits are the max_image_width and max_image_height
limits, but more will be added in the future. LimitSupport will default to support
being false, and decoders should enable support for the limits they support in
ImageDecoder::set_limits.
The limit check should only ever fail if a limit will be exceeded or an unsupported strict limit is used.
Fields (Non-exhaustive)§
This struct is marked as non-exhaustive
Struct { .. } syntax; cannot be matched against without a wildcard ..; and struct update syntax will not work.max_image_width: Option<u32>The maximum allowed image width. This limit is strict. The default is no limit.
max_image_height: Option<u32>The maximum allowed image height. This limit is strict. The default is no limit.
max_alloc: Option<u64>The maximum allowed sum of allocations allocated by the decoder at any one time excluding allocator overhead. This limit is non-strict by default and some decoders may ignore it. The bytes required to store the output image count towards this value. The default is 512MiB.
Implementations§
Source§impl Limits
 
impl Limits
Sourcepub fn check_support(&self, _supported: &LimitSupport) -> Result<(), ImageError>
 
pub fn check_support(&self, _supported: &LimitSupport) -> Result<(), ImageError>
This function checks that all currently set strict limits are supported.
Sourcepub fn check_dimensions(
    &self,
    width: u32,
    height: u32,
) -> Result<(), ImageError>
 
pub fn check_dimensions( &self, width: u32, height: u32, ) -> Result<(), ImageError>
This function checks the max_image_width and max_image_height limits given
the image width and height.
Sourcepub fn reserve(&mut self, amount: u64) -> Result<(), ImageError>
 
pub fn reserve(&mut self, amount: u64) -> Result<(), ImageError>
This function checks that the current limit allows for reserving the set amount of bytes, it then reduces the limit accordingly.
Sourcepub fn reserve_usize(&mut self, amount: usize) -> Result<(), ImageError>
 
pub fn reserve_usize(&mut self, amount: usize) -> Result<(), ImageError>
This function acts identically to reserve, but takes a usize for convenience.
Sourcepub fn reserve_buffer(
    &mut self,
    width: u32,
    height: u32,
    color_type: ColorType,
) -> Result<(), ImageError>
 
pub fn reserve_buffer( &mut self, width: u32, height: u32, color_type: ColorType, ) -> Result<(), ImageError>
This function acts identically to reserve, but accepts the width, height and color type
used to create an ImageBuffer and does all the math for you.
Sourcepub fn free(&mut self, amount: u64)
 
pub fn free(&mut self, amount: u64)
This function increases the max_alloc limit with amount. Should only be used
together with reserve.
Sourcepub fn free_usize(&mut self, amount: usize)
 
pub fn free_usize(&mut self, amount: usize)
This function acts identically to free, but takes a usize for convenience.
Trait Implementations§
Source§impl Default for Limits
Add some reasonable limits.
 
impl Default for Limits
Add some reasonable limits.
Note: This is not equivalent to not adding limits. This may be changed in future major version increases.
impl Eq for Limits
impl StructuralPartialEq for Limits
Auto Trait Implementations§
impl Freeze for Limits
impl RefUnwindSafe for Limits
impl Send for Limits
impl Sync for Limits
impl Unpin for Limits
impl UnwindSafe for Limits
Blanket Implementations§
Source§impl<S, D, Swp, Dwp, T> AdaptInto<D, Swp, Dwp, T> for Swhere
    T: Real + Zero + Arithmetics + Clone,
    Swp: WhitePoint<T>,
    Dwp: WhitePoint<T>,
    D: AdaptFrom<S, Swp, Dwp, T>,
 
impl<S, D, Swp, Dwp, T> AdaptInto<D, Swp, Dwp, T> for Swhere
    T: Real + Zero + Arithmetics + Clone,
    Swp: WhitePoint<T>,
    Dwp: WhitePoint<T>,
    D: AdaptFrom<S, Swp, Dwp, T>,
Source§fn adapt_into_using<M>(self, method: M) -> Dwhere
    M: TransformMatrix<T>,
 
fn adapt_into_using<M>(self, method: M) -> Dwhere
    M: TransformMatrix<T>,
Source§fn adapt_into(self) -> D
 
fn adapt_into(self) -> D
Source§impl<T, Res> Apply<Res> for Twhere
    T: ?Sized,
 
impl<T, Res> Apply<Res> for Twhere
    T: ?Sized,
Source§impl<T, C> ArraysFrom<C> for Twhere
    C: IntoArrays<T>,
 
impl<T, C> ArraysFrom<C> for Twhere
    C: IntoArrays<T>,
Source§fn arrays_from(colors: C) -> T
 
fn arrays_from(colors: C) -> T
Source§impl<T, C> ArraysInto<C> for Twhere
    C: FromArrays<T>,
 
impl<T, C> ArraysInto<C> for Twhere
    C: FromArrays<T>,
Source§fn arrays_into(self) -> C
 
fn arrays_into(self) -> C
Source§impl<T> BorrowMut<T> for Twhere
    T: ?Sized,
 
impl<T> BorrowMut<T> for Twhere
    T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
 
fn borrow_mut(&mut self) -> &mut T
Source§impl<WpParam, T, U> Cam16IntoUnclamped<WpParam, T> for Uwhere
    T: FromCam16Unclamped<WpParam, U>,
 
impl<WpParam, T, U> Cam16IntoUnclamped<WpParam, T> for Uwhere
    T: FromCam16Unclamped<WpParam, U>,
Source§type Scalar = <T as FromCam16Unclamped<WpParam, U>>::Scalar
 
type Scalar = <T as FromCam16Unclamped<WpParam, U>>::Scalar
parameters when converting.Source§fn cam16_into_unclamped(
    self,
    parameters: BakedParameters<WpParam, <U as Cam16IntoUnclamped<WpParam, T>>::Scalar>,
) -> T
 
fn cam16_into_unclamped( self, parameters: BakedParameters<WpParam, <U as Cam16IntoUnclamped<WpParam, T>>::Scalar>, ) -> T
self into C, using the provided parameters.Source§impl<T> CloneToUninit for Twhere
    T: Clone,
 
impl<T> CloneToUninit for Twhere
    T: Clone,
Source§impl<T, C> ComponentsFrom<C> for Twhere
    C: IntoComponents<T>,
 
impl<T, C> ComponentsFrom<C> for Twhere
    C: IntoComponents<T>,
Source§fn components_from(colors: C) -> T
 
fn components_from(colors: C) -> T
Source§impl<T> Downcast for Twhere
    T: Any,
 
impl<T> Downcast for Twhere
    T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
 
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
 
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
 
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
 
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSync for T
 
impl<T> DowncastSync for T
Source§impl<Q, K> Equivalent<K> for Q
 
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
 
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
 
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.Source§impl<T> FromAngle<T> for T
 
impl<T> FromAngle<T> for T
Source§fn from_angle(angle: T) -> T
 
fn from_angle(angle: T) -> T
angle.Source§impl<T, U> FromStimulus<U> for Twhere
    U: IntoStimulus<T>,
 
impl<T, U> FromStimulus<U> for Twhere
    U: IntoStimulus<T>,
Source§fn from_stimulus(other: U) -> T
 
fn from_stimulus(other: U) -> T
other into Self, while performing the appropriate scaling,
rounding and clamping.Source§impl<T> Instrument for T
 
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
 
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
 
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T, U> IntoAngle<U> for Twhere
    U: FromAngle<T>,
 
impl<T, U> IntoAngle<U> for Twhere
    U: FromAngle<T>,
Source§fn into_angle(self) -> U
 
fn into_angle(self) -> U
T.Source§impl<WpParam, T, U> IntoCam16Unclamped<WpParam, T> for Uwhere
    T: Cam16FromUnclamped<WpParam, U>,
 
impl<WpParam, T, U> IntoCam16Unclamped<WpParam, T> for Uwhere
    T: Cam16FromUnclamped<WpParam, U>,
Source§type Scalar = <T as Cam16FromUnclamped<WpParam, U>>::Scalar
 
type Scalar = <T as Cam16FromUnclamped<WpParam, U>>::Scalar
parameters when converting.Source§fn into_cam16_unclamped(
    self,
    parameters: BakedParameters<WpParam, <U as IntoCam16Unclamped<WpParam, T>>::Scalar>,
) -> T
 
fn into_cam16_unclamped( self, parameters: BakedParameters<WpParam, <U as IntoCam16Unclamped<WpParam, T>>::Scalar>, ) -> T
self into C, using the provided parameters.Source§impl<T, U> IntoColor<U> for Twhere
    U: FromColor<T>,
 
impl<T, U> IntoColor<U> for Twhere
    U: FromColor<T>,
Source§fn into_color(self) -> U
 
fn into_color(self) -> U
Source§impl<T, U> IntoColorUnclamped<U> for Twhere
    U: FromColorUnclamped<T>,
 
impl<T, U> IntoColorUnclamped<U> for Twhere
    U: FromColorUnclamped<T>,
Source§fn into_color_unclamped(self) -> U
 
fn into_color_unclamped(self) -> U
Source§impl<T> IntoStimulus<T> for T
 
impl<T> IntoStimulus<T> for T
Source§fn into_stimulus(self) -> T
 
fn into_stimulus(self) -> T
self into T, while performing the appropriate scaling,
rounding and clamping.Source§impl<T, C> TryComponentsInto<C> for Twhere
    C: TryFromComponents<T>,
 
impl<T, C> TryComponentsInto<C> for Twhere
    C: TryFromComponents<T>,
Source§type Error = <C as TryFromComponents<T>>::Error
 
type Error = <C as TryFromComponents<T>>::Error
try_into_colors fails to cast.Source§fn try_components_into(self) -> Result<C, <T as TryComponentsInto<C>>::Error>
 
fn try_components_into(self) -> Result<C, <T as TryComponentsInto<C>>::Error>
Source§impl<T, U> TryIntoColor<U> for Twhere
    U: TryFromColor<T>,
 
impl<T, U> TryIntoColor<U> for Twhere
    U: TryFromColor<T>,
Source§fn try_into_color(self) -> Result<U, OutOfBounds<U>>
 
fn try_into_color(self) -> Result<U, OutOfBounds<U>>
OutOfBounds error is returned which contains
the unclamped color. Read more