pub struct Compression {
pub algorithms: Vec<CompressionAlgorithm>,
pub level: Option<u8>,
pub min_size: u64,
pub content_types: Vec<String>,
pub excluded_content_types: Vec<String>,
}Expand description
Route-scoped response compression policy (DW-027, feature analysis 4.13).
Semantics (frozen; negotiation and encoding live in
dataplane::compression):
algorithmsis the PREFERENCE order: the first entry the request’sAccept-Encodingaccepts wins.q=0entries inAccept-Encodingare treated as refusal.levelis clamped per algorithm at encode time (gzip 0-9, brotli 0-11, zstd 0-22; validation bounds the field to 0-22). Absent: the algorithm’s library default.min_sizeskips compression of responses whose size is known and below it — a declaredContent-Lengthor the exact size of the gateway’s own respond/redirect bodies. Responses of UNKNOWN length (streaming) are always candidates.content_types(when non-empty) restricts compression to responses whoseContent-Typestarts with one of the entries; entries are lowercase prefix matches (e.g.text/).excluded_content_typesis checked after the include list and wins (the way to express “compress everything text/ excepttext/event-stream”).- Responses carrying an existing
Content-Encoding, 1xx/204/304 statuses, zero-length bodies, and 101 upgrade responses are never compressed.Vary: Accept-Encodingis merged into every response on a compression-configured route that is not already encoded — compressed or not — so caches key correctly. - The compressed body streams chunk-by-chunk with a flush per chunk (streaming/SSE-friendly, at a small compression-ratio cost); the gateway never buffers the whole body to compress it. The frame codec’s internal buffer is bounded by the chunk size.
Fields§
§algorithms: Vec<CompressionAlgorithm>Enabled algorithms in preference order (default gzip, brotli, zstd). Must be non-empty and duplicate-free (validation).
level: Option<u8>Compression level; clamped per algorithm (gzip <= 9, brotli <= 11, zstd <= 22). Absent: library default per algorithm.
min_size: u64Minimum response size (bytes) to compress, applied whenever the
size is known: a declared Content-Length or the body’s exact
size (the gateway’s own respond/redirect bodies, which carry no
Content-Length). Below it the response passes through (still
carrying Vary: Accept-Encoding). Default 1024. Responses of
unknown length (streaming) are always candidates.
content_types: Vec<String>Content-Type prefix include list (lowercase, e.g. text/,
application/json); empty = every content type is a candidate.
excluded_content_types: Vec<String>Content-Type prefix exclude list, checked after content_types;
a match passes the response through uncompressed.
Trait Implementations§
Source§impl Clone for Compression
impl Clone for Compression
Source§fn clone(&self) -> Compression
fn clone(&self) -> Compression
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for Compression
impl Debug for Compression
Source§impl<'de> Deserialize<'de> for Compression
impl<'de> Deserialize<'de> for Compression
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Source§impl JsonSchema for Compression
impl JsonSchema for Compression
Source§fn schema_id() -> Cow<'static, str>
fn schema_id() -> Cow<'static, str>
Source§fn json_schema(generator: &mut SchemaGenerator) -> Schema
fn json_schema(generator: &mut SchemaGenerator) -> Schema
Source§fn inline_schema() -> bool
fn inline_schema() -> bool
$ref keyword. Read moreSource§impl PartialEq for Compression
impl PartialEq for Compression
Source§impl Serialize for Compression
impl Serialize for Compression
impl StructuralPartialEq for Compression
Auto Trait Implementations§
impl Freeze for Compression
impl RefUnwindSafe for Compression
impl Send for Compression
impl Sync for Compression
impl Unpin for Compression
impl UnwindSafe for Compression
Blanket Implementations§
§impl<T> AnyExt for T
impl<T> AnyExt for T
§fn downcast_ref<T>(this: &Self) -> Option<&T>where
T: Any,
fn downcast_ref<T>(this: &Self) -> Option<&T>where
T: Any,
T behind reference§fn downcast_mut<T>(this: &mut Self) -> Option<&mut T>where
T: Any,
fn downcast_mut<T>(this: &mut Self) -> Option<&mut T>where
T: Any,
T behind mutable reference§fn downcast_rc<T>(this: Rc<Self>) -> Result<Rc<T>, Rc<Self>>where
T: Any,
fn downcast_rc<T>(this: Rc<Self>) -> Result<Rc<T>, Rc<Self>>where
T: Any,
T behind Rc pointer§fn downcast_arc<T>(this: Arc<Self>) -> Result<Arc<T>, Arc<Self>>where
T: Any,
fn downcast_arc<T>(this: Arc<Self>) -> Result<Arc<T>, Arc<Self>>where
T: Any,
T behind Arc pointer§fn downcast_box<T>(this: Box<Self>) -> Result<Box<T>, Box<Self>>where
T: Any,
fn downcast_box<T>(this: Box<Self>) -> Result<Box<T>, Box<Self>>where
T: Any,
T behind Box pointer§fn downcast_move<T>(this: Self) -> Option<T>
fn downcast_move<T>(this: Self) -> Option<T>
Self to T,
useful only in generic context as a workaround for specializationSource§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,
§impl<T, X> CoerceTo<T> for Xwhere
T: CoerceFrom<X> + ?Sized,
impl<T, X> CoerceTo<T> for Xwhere
T: CoerceFrom<X> + ?Sized,
fn coerce_rc_to(self: Rc<X>) -> Rc<T>
fn coerce_box_to(self: Box<X>) -> Box<T>
fn coerce_ref_to(&self) -> &T
fn coerce_mut_to(&mut self) -> &mut T
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
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