Skip to main content

ClientConfig

Struct ClientConfig 

Source
#[non_exhaustive]
pub struct ClientConfig { pub request_timeout: Duration, pub max_session_body: u64, pub max_call_body: u64, pub max_download_body: u64, pub max_upload_response_body: u64, pub max_sse_frame: usize, pub max_ws_message: usize, }
Expand description

Per-client configuration for timeouts and body size limits.

Use ClientConfig::default() for production defaults (30s timeout, RFC-safe caps).

This type is #[non_exhaustive]: callers outside this crate must use ..ClientConfig::default() when constructing it, allowing new fields to be added in minor versions without breaking callers.

Fields (Non-exhaustive)§

This struct is marked as non-exhaustive
Non-exhaustive structs could have additional fields added in future. Therefore, non-exhaustive structs cannot be constructed in external crates using the traditional Struct { .. } syntax; cannot be matched against without a wildcard ..; and struct update syntax will not work.
§request_timeout: Duration

Timeout for HTTP request/response cycles (fetch_session, call, upload_blob, download_blob). Does NOT apply to SSE or WebSocket streams (which are indefinite by nature). Must be > 0. Use Duration::from_secs(30) for a 30-second timeout. Default: 30 seconds.

§max_session_body: u64

Maximum response body for fetch_session. Default: 1 MiB.

§max_call_body: u64

Maximum response body for call(). Default: 8 MiB.

§max_download_body: u64

Maximum response body for download_blob(). Default: 64 MiB.

§max_upload_response_body: u64

Maximum size in bytes of the JSON response body returned by the server in reply to upload_blob(). Does NOT cap the size of the blob being uploaded — the JMAP server enforces that via its maxSizeUpload capability. This field caps only the small JSON envelope the server returns describing the stored blob. Default: 1 MiB.

§max_sse_frame: usize

Maximum byte length of a single SSE frame; applied independently to the raw incoming bytes (pre-UTF-8 decode) and the decoded text. Protects against memory exhaustion from a hostile or misbehaving server that sends a single very large frame. Must be > 0. Default: 1 MiB.

Memory residency note (bd:JMAP-6lsm.7): because the raw byte buffer and the decoded text buffer are tracked separately, the in-flight footprint while parsing a single frame can momentarily reach ~2 × max_sse_frame (raw bytes accumulated up to the limit, plus decoded text not yet drained). If you tune this value for a tight memory budget, plan for that 2× peak. The independent tracking is correct for the streaming UTF-8 decoder (which needs the raw buffer to be at least one full frame to handle split multi-byte sequences across HTTP chunks); see decode_utf8_chunk for the rationale.

§max_ws_message: usize

Maximum byte length of a single WebSocket message (and frame). Mirrors max_sse_frame for the WebSocket transport. Used by JmapClient::connect_ws_session and threaded through to tokio_tungstenite::tungstenite::protocol::WebSocketConfig’s max_message_size and max_frame_size. Must be > 0. Default: 1 MiB. (bd:JMAP-6lsm.5)

Implementations§

Source§

impl ClientConfig

Source

pub fn validate(&self) -> Result<(), ClientError>

Validate that all config fields satisfy their constraints.

Called automatically by JmapClient::new. Callers may also call this directly to pre-validate a config before passing it to the constructor.

§Errors

Returns ClientError::InvalidArgument when any field is zero or out-of-range.

Trait Implementations§

Source§

impl Clone for ClientConfig

Source§

fn clone(&self) -> ClientConfig

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for ClientConfig

Source§

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

Formats the value using the given formatter. Read more
Source§

impl Default for ClientConfig

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl PartialEq for ClientConfig

Source§

fn eq(&self, other: &ClientConfig) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Eq for ClientConfig

Source§

impl StructuralPartialEq for ClientConfig

Auto Trait Implementations§

Blanket Implementations§

Source§

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

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

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

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

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

Source§

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

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

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

Source§

fn into(self) -> U

Calls U::from(self).

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

Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

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

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

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

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

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

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more