Skip to main content

Part

Struct Part 

pub struct Part { /* private fields */ }
Available on crate features http and multipart only.
Expand description

A single part of a multipart Form.

Built via text, bytes, stream, or file. Customise with with_file_name, try_with_mime_str, with_content_size, or with_headers.

Implementations§

§

impl Part

pub fn text<V>(value: V) -> Part
where V: Into<Cow<'static, str>>,

Create a text part.

pub fn bytes<B>(value: B) -> Part
where B: Into<Bytes>,

Create a part from raw bytes.

pub fn stream<S, O, E>(stream: S) -> Part
where S: Stream<Item = Result<O, E>> + Send + 'static, O: Into<Bytes> + 'static, E: Into<Box<dyn Error + Send + Sync>> + 'static,

Create a streaming part. The content size is unknown unless set explicitly via with_content_size.

pub async fn file<P>(path: P) -> Result<Part, Error>
where P: AsRef<Path>,

Create a part from a file. The filename is taken from the path’s last component, the MIME type is inferred from the extension (falling back to application/octet-stream), and the content size is read from filesystem metadata.

Filenames are converted to UTF-8 using lossy replacement of any non-UTF-8 bytes (relevant on Unix where filenames are arbitrary byte sequences). If you need to preserve non-UTF-8 names verbatim, build the Part yourself with Part::file and override the name via Part::with_file_name from a known UTF-8 source.

The reported content_size is taken from filesystem metadata at the moment of the call. Concurrent writers that change the file size between this call and the body being sent can desynchronise the advertised Content-Length from the actually-streamed bytes; avoid passing a path to a file that may be modified mid-flight.

pub fn with_file_name(self, file_name: impl Into<Cow<'static, str>>) -> Part

Filename used in the part’s Content-Disposition header.

Accepts anything that converts into Cow<'static, str>&'static str literals, owned String, or an explicit Cow::Owned/Cow::Borrowed.

pub fn set_file_name( &mut self, file_name: impl Into<Cow<'static, str>>, ) -> &mut Part

Filename used in the part’s Content-Disposition header.

Accepts anything that converts into Cow<'static, str>&'static str literals, owned String, or an explicit Cow::Owned/Cow::Borrowed.

pub fn maybe_with_mime(self, mime: Option<Mime>) -> Part

The part’s Content-Type, as a parsed Mime.

with_*/set_* set, without_*/unset_* clear any previously-set value.

pub fn maybe_set_mime(&mut self, mime: Option<Mime>) -> &mut Part

The part’s Content-Type, as a parsed Mime.

with_*/set_* set, without_*/unset_* clear any previously-set value.

pub fn with_mime(self, mime: Mime) -> Part

The part’s Content-Type, as a parsed Mime.

with_*/set_* set, without_*/unset_* clear any previously-set value.

pub fn set_mime(&mut self, mime: Mime) -> &mut Part

The part’s Content-Type, as a parsed Mime.

with_*/set_* set, without_*/unset_* clear any previously-set value.

pub fn without_mime(self) -> Part

The part’s Content-Type, as a parsed Mime.

with_*/set_* set, without_*/unset_* clear any previously-set value.

pub fn unset_mime(&mut self) -> &mut Part

The part’s Content-Type, as a parsed Mime.

with_*/set_* set, without_*/unset_* clear any previously-set value.

pub fn try_with_mime_str(self, mime_str: &str) -> Result<Part, FromStrError>

The part’s Content-Type parsed from a string such as "image/png". Generates try_with_mime_str / try_set_mime_str companions returning Result.

pub fn try_set_mime_str( &mut self, mime_str: &str, ) -> Result<&mut Part, FromStrError>

The part’s Content-Type parsed from a string such as "image/png". Generates try_with_mime_str / try_set_mime_str companions returning Result.

pub fn maybe_with_content_size(self, size: Option<u64>) -> Part

Known content size in bytes. For streaming parts this allows the surrounding Form to advertise a Content-Length.

pub fn maybe_set_content_size(&mut self, size: Option<u64>) -> &mut Part

Known content size in bytes. For streaming parts this allows the surrounding Form to advertise a Content-Length.

pub fn with_content_size(self, size: u64) -> Part

Known content size in bytes. For streaming parts this allows the surrounding Form to advertise a Content-Length.

pub fn set_content_size(&mut self, size: u64) -> &mut Part

Known content size in bytes. For streaming parts this allows the surrounding Form to advertise a Content-Length.

pub fn without_content_size(self) -> Part

Known content size in bytes. For streaming parts this allows the surrounding Form to advertise a Content-Length.

pub fn unset_content_size(&mut self) -> &mut Part

Known content size in bytes. For streaming parts this allows the surrounding Form to advertise a Content-Length.

pub fn with_headers(self, headers: HeaderMap) -> Part

Replace the part’s headers (other than Content-Disposition and Content-Type, which are derived from the part’s metadata).

RFC 7578 §4.8 states that headers other than Content-Disposition, Content-Type, and (legacy) Content-Transfer-Encoding “MUST NOT be included and MUST be ignored” by receivers. Custom headers are allowed here for compatibility with non-standard receivers, but strictly conforming peers will silently drop them.

pub fn set_headers(&mut self, headers: HeaderMap) -> &mut Part

Replace the part’s headers (other than Content-Disposition and Content-Type, which are derived from the part’s metadata).

RFC 7578 §4.8 states that headers other than Content-Disposition, Content-Type, and (legacy) Content-Transfer-Encoding “MUST NOT be included and MUST be ignored” by receivers. Custom headers are allowed here for compatibility with non-standard receivers, but strictly conforming peers will silently drop them.

Trait Implementations§

§

impl Debug for Part

§

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

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl !Freeze for Part

§

impl !RefUnwindSafe for Part

§

impl Send for Part

§

impl !Sync for Part

§

impl Unpin for Part

§

impl UnsafeUnpin for Part

§

impl !UnwindSafe for Part

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
§

impl<'a, T, E> AsTaggedExplicit<'a, E> for T
where T: 'a,

§

fn explicit(self, class: Class, tag: u32) -> TaggedParser<'a, Explicit, Self, E>

§

impl<'a, T, E> AsTaggedImplicit<'a, E> for T
where T: 'a,

§

fn implicit( self, class: Class, constructed: bool, tag: u32, ) -> TaggedParser<'a, Implicit, Self, E>

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> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> FutureExt for T

§

fn with_context(self, otel_cx: Context) -> WithContext<Self>

Attaches the provided Context to this type, returning a WithContext wrapper. Read more
§

fn with_current_context(self) -> WithContext<Self>

Attaches the current Context to this type, returning a WithContext wrapper. Read more
§

impl<T> Instrument for T

§

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

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

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> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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
§

impl<T> IntoRequest<T> for T

§

fn into_request(self) -> Request<T>

Wrap the input message T in a rama_grpc::Request
§

impl<L> LayerExt<L> for L

§

fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>
where L: Layer<S>,

Applies the layer to a service and wraps it in Layered.
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
§

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

§

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
§

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
§

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

§

fn rama_from(value: T) -> U

§

impl<T, U, CrateMarker> RamaInto<U, CrateMarker> for T
where U: RamaFrom<T, CrateMarker>,

§

fn rama_into(self) -> U

§

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

§

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

§

fn rama_try_from(value: T) -> Result<U, <U as RamaTryFrom<T>>::Error>

§

impl<T, U, CrateMarker> RamaTryInto<U, CrateMarker> for T
where U: RamaTryFrom<T, CrateMarker>,

§

type Error = <U as RamaTryFrom<T, CrateMarker>>::Error

§

fn rama_try_into(self) -> Result<U, <U as RamaTryFrom<T, CrateMarker>>::Error>

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
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.
§

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

§

fn vzip(self) -> V

§

impl<V, F> ValueFormatter<&V> for F
where F: ValueFormatter<V> + ?Sized, V: ?Sized,

§

fn format_value(writer: impl ValueWriter, value: &&V)

Write value to writer
§

impl<V, F> ValueFormatter<Arc<V>> for F
where F: ValueFormatter<V> + ?Sized, V: ?Sized,

§

fn format_value(writer: impl ValueWriter, value: &Arc<V>)

Write value to writer
§

impl<V, F> ValueFormatter<Box<V>> for F
where F: ValueFormatter<V> + ?Sized, V: ?Sized,

§

fn format_value(writer: impl ValueWriter, value: &Box<V>)

Write value to writer
§

impl<V, F> ValueFormatter<Cow<'_, V>> for F
where V: ToOwned + ?Sized, F: ValueFormatter<V> + ?Sized,

§

fn format_value(writer: impl ValueWriter, value: &Cow<'_, V>)

Write value to writer
§

impl<V, F> ValueFormatter<Option<V>> for F
where F: ValueFormatter<V> + ?Sized,

§

fn format_value(writer: impl ValueWriter, value: &Option<V>)

Write value to writer
§

impl<T> WithSubscriber for T

§

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
§

fn with_current_subscriber(self) -> WithDispatch<Self>

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