#[non_exhaustive]pub struct BlobUploadResponse {
pub account_id: Id,
pub blob_id: Id,
pub content_type: String,
pub size: u64,
pub sha256: Option<Sha256>,
pub extra: Map<String, Value>,
}Expand description
Response body returned by a successful blob upload (RFC 8620 §6.1).
§SemVer coupling with jmap-cid-types (bd:JMAP-6r7c.30)
The sha256 field uses jmap_cid_types::Sha256 — a workspace-sibling
type, not a wrapped opaque type the way reqwest::Error is wrapped
behind HttpError. Consumers that touch
BlobUploadResponse.sha256 transitively depend on jmap-cid-types and
must pin its major version alongside jmap-base-client.
The coupling is deliberate. jmap-cid-types is a workspace sibling of
jmap-base-client (both live in the crate-jmap workspace) and ships
in the same release cadence — every jmap-cid-types major bump is also
a jmap-base-client major bump. The SemVer-isolation pattern that
hides reqwest::Error behind HttpError is
designed for third-party deps whose release cadence is uncorrelated
with this crate’s; workspace siblings do not need that isolation
because the workspace-level major-version policy already coordinates
them.
Third-party consumers picking up jmap-base-client from crates.io
should declare both deps with matching majors:
[dependencies]
jmap-base-client = "0.1"
jmap-cid-types = "0.1"If you only ever pattern-match on Option::Some(_) (without naming the
inner type) you can skip the explicit jmap-cid-types dep; touching
Sha256’s methods or AsRef<str> impl requires it.
§extra equality is feature-flag-dependent (bd:JMAP-6r7c.43)
The derived PartialEq / Eq impl’s behaviour on the extra field
depends on the global serde_json/preserve_order feature flag — see
the crate-level note
for the canonical statement and the workspace posture.
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.account_id: IdThe account the blob was uploaded to.
blob_id: IdServer-assigned opaque blob identifier.
content_type: StringMedia type of the uploaded blob as determined by the server.
size: u64Size of the uploaded blob in bytes.
sha256: Option<Sha256>SHA-256 digest of the uploaded blob, present only when the
server advertises the urn:ietf:params:jmap:cid capability
(draft-atwood-jmap-cid-00 §3).
The wire format is a 64-character lowercase-hex string per
the draft’s ABNF (%x30-39 / %x61-66). The typed
jmap_cid_types::Sha256 enforces that shape on
deserialize: a server response carrying a sha256 field that
is not exactly 64 bytes of lowercase hex will fail to parse
and surface as ClientError::Parse. Servers that do not
implement the CID extension omit the field; the typed
representation here is None.
History: bd:JMAP-v9py.13 promoted this field from a permissive
Option<String> to the typed Option<jmap_cid_types::Sha256>,
and bd:JMAP-6r7c.48 propagated the same typed shape to the
download-side DownloadBlobParams::expected_sha256
caller-supplied argument. The previous implementation tolerated
uppercase hex via a permissive ad-hoc validator and a normalize-
to-lowercase step before integrity comparison; the typed path is
strict on every construction site. The inter-op question (whether
to recover the uppercase tolerance via a custom Deserialize wrapper)
is tracked by bd:JMAP-noz7.
extra: Map<String, Value>Catch-all for vendor / site / private extension fields not covered by the typed fields above. Preserves unknown fields across deserialize/serialize round-trip per workspace extras-preservation policy (see workspace AGENTS.md).
Trait Implementations§
Source§impl Clone for BlobUploadResponse
impl Clone for BlobUploadResponse
Source§fn clone(&self) -> BlobUploadResponse
fn clone(&self) -> BlobUploadResponse
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 BlobUploadResponse
impl Debug for BlobUploadResponse
Source§impl<'de> Deserialize<'de> for BlobUploadResponse
impl<'de> Deserialize<'de> for BlobUploadResponse
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>,
impl Eq for BlobUploadResponse
Source§impl PartialEq for BlobUploadResponse
impl PartialEq for BlobUploadResponse
Source§fn eq(&self, other: &BlobUploadResponse) -> bool
fn eq(&self, other: &BlobUploadResponse) -> bool
self and other values to be equal, and is used by ==.