#[non_exhaustive]pub struct TransformOptions {Show 19 fields
pub width: Option<u32>,
pub height: Option<u32>,
pub fit: Option<Fit>,
pub position: Option<Position>,
pub format: Option<MediaType>,
pub quality: Option<u8>,
pub optimize: OptimizeMode,
pub target_quality: Option<TargetQuality>,
pub background: Option<Rgba8>,
pub rotate: Rotation,
pub auto_orient: bool,
pub strip_metadata: bool,
pub preserve_exif: bool,
pub blur: Option<f32>,
pub sharpen: Option<f32>,
pub grayscale: bool,
pub without_enlargement: bool,
pub crop: Option<CropRegion>,
pub deadline: Option<Duration>,
}Expand description
Raw transform options before defaulting and validation has completed.
Start from TransformOptions::default() and assign the fields you need. Validation and
the resolution of the rest happen inside transform, which reports
what it refuses through TransformError. The struct is #[non_exhaustive], so a field
a later version of truss adds is a minor change rather than a breaking one, and a struct
literal is not available from outside the crate.
§Examples
use truss::{TransformOptions, MediaType, Rotation};
let mut opts = TransformOptions::default();
opts.width = Some(800);
opts.height = Some(600);
opts.format = Some(MediaType::Webp);
opts.quality = Some(80);
opts.rotate = Rotation::DEG_90;
assert_eq!(opts.width, Some(800));
assert_eq!(opts.quality, Some(80));
assert_eq!(opts.rotate, Rotation::DEG_90);
// strip_metadata defaults to true
assert!(opts.strip_metadata);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.width: Option<u32>The desired output width in pixels.
height: Option<u32>The desired output height in pixels.
fit: Option<Fit>The requested resize fit mode.
position: Option<Position>The requested positioning mode.
format: Option<MediaType>The requested output format.
quality: Option<u8>The requested lossy quality.
optimize: OptimizeModeThe requested optimization mode.
target_quality: Option<TargetQuality>Optional perceptual target used by lossy optimization.
background: Option<Rgba8>The requested background color.
rotate: RotationThe requested extra rotation.
auto_orient: boolWhether EXIF-based auto-orientation should run.
strip_metadata: boolWhether metadata should be stripped from the output.
preserve_exif: boolWhether EXIF metadata should be preserved.
blur: Option<f32>Gaussian blur sigma.
When set, a Gaussian blur with the given sigma is applied after resizing and before encoding. Valid range is 0.1–100.0.
sharpen: Option<f32>Unsharp-mask (sharpen) sigma.
When set, an unsharp mask with the given sigma is applied after resizing and before encoding. Valid range is 0.1–100.0. The sharpening threshold is fixed at 1.
grayscale: boolWhether the image should be desaturated to grayscale.
When true, the image is converted to grayscale after resizing, blur, and
sharpening, and before any watermark is composited, so a watermark keeps
its own colors. Luminance is computed with the Rec. 601 weights the
image crate uses, and the alpha channel is preserved.
without_enlargement: boolWhether a source smaller than the requested size may be scaled up.
When true, the resize never enlarges: an image already within the requested
bounds is left at its own size. This is a separate question from Fit, which
decides how the image is arranged relative to the box, so the two combine freely.
contain still pads out to the full requested box; only the content inside it
stops growing.
crop: Option<CropRegion>Optional explicit crop region applied before resize.
When set, the image is cropped to the specified rectangle before any resize operation. The crop region is validated at runtime against the decoded image dimensions.
deadline: Option<Duration>Optional wall-clock deadline for the transform pipeline.
When set, the transform checks elapsed time at each pipeline stage and returns
TransformError::LimitExceeded if the deadline is exceeded. Adapters inject
this value based on their operational requirements — for example, the HTTP server
sets a 30-second deadline while the CLI leaves it as None (unlimited).
The check happens between stages, not inside one. A stage that is already running runs to its end, so a transform can return after the deadline rather than at it, by however long its slowest single step takes. Encoding is the step where that matters, since no encoder truss calls can be interrupted part way.
Trait Implementations§
Source§impl Clone for TransformOptions
impl Clone for TransformOptions
Source§fn clone(&self) -> TransformOptions
fn clone(&self) -> TransformOptions
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for TransformOptions
impl Debug for TransformOptions
Source§impl Default for TransformOptions
impl Default for TransformOptions
Source§impl PartialEq for TransformOptions
impl PartialEq for TransformOptions
impl StructuralPartialEq for TransformOptions
Auto Trait Implementations§
impl Freeze for TransformOptions
impl RefUnwindSafe for TransformOptions
impl Send for TransformOptions
impl Sync for TransformOptions
impl Unpin for TransformOptions
impl UnsafeUnpin for TransformOptions
impl UnwindSafe for TransformOptions
Blanket Implementations§
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<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more