pub struct Capped<T> {
pub value: T,
pub n: N,
}
Expand description
Encapsulates a value capped to a data limit.
A Capped<T>
type represents a T
that has been limited (capped) to some
number of bytes. The internal N
specifies whether the value is complete
(also Capped::is_complete()
) or whether it was capped prematurely. A
Capped
is returned by various methods of DataStream
. Some
Capped<T>
types, like Capped<String>
and Capped<TempFile>
, implement
traits like FromData
and FromForm
.
Example
Since Capped<TempFile>
implements FromData
, it can be used as a data
guard. The following Rocket route accepts a raw upload and stores the upload
in a different directory depending on whether the file exceeded the data
limit or not. See TempFile
for details on temporary file storage
locations and limits.
use rocket::data::Capped;
use rocket::fs::TempFile;
#[post("/upload", data = "<file>")]
async fn upload(mut file: Capped<TempFile<'_>>) -> std::io::Result<()> {
if file.is_complete() {
file.persist_to("/tmp/complete/file.txt").await?;
} else {
file.persist_to("/tmp/incomplete/file.txt").await?;
}
Ok(())
}
Fields
value: T
The capped value itself.
n: N
The number of bytes written and whether value
is complete.
Implementations
sourceimpl<T> Capped<T>
impl<T> Capped<T>
sourcepub fn new(value: T, n: N) -> Self
pub fn new(value: T, n: N) -> Self
Creates a new Capped
from a value
and an n
. Prefer to use
Capped::from()
when possible.
Example
use rocket::data::{Capped, N};
let n = N { written: 2, complete: true };
let capped = Capped::new("hi".to_string(), n);
sourcepub fn complete(value: T, len: usize) -> Self
pub fn complete(value: T, len: usize) -> Self
Creates a new Capped
from a value
and the length of value
n
,
marking value
as complete. Prefer to use Capped::from()
when
possible.
Example
use rocket::data::{Capped, N};
let string = "hi";
let capped = Capped::complete("hi", string.len());
sourcepub fn map<U, F: FnOnce(T) -> U>(self, f: F) -> Capped<U>
pub fn map<U, F: FnOnce(T) -> U>(self, f: F) -> Capped<U>
Converts a Capped<T>
to Capped<U>
by applying f
to the contained
value.
Example
use rocket::data::{Capped, N};
let n = N { written: 2, complete: true };
let capped: Capped<usize> = Capped::new(10usize, n);
let mapped: Capped<String> = capped.map(|n| n.to_string());
sourcepub fn is_empty(&self) -> bool
pub fn is_empty(&self) -> bool
Returns true
if self.n.written
is 0
, that is, no bytes were
written to value
.
Example
use rocket::data::{Capped, N};
let n = N { written: 2, complete: true };
let capped = Capped::new("hi".to_string(), n);
assert!(!capped.is_empty());
let n = N { written: 0, complete: true };
let capped = Capped::new("".to_string(), n);
assert!(capped.is_empty());
sourcepub fn is_complete(&self) -> bool
pub fn is_complete(&self) -> bool
Returns true
if self.n.complete
, that is, value
represents the
entire data stream.
Example
use rocket::data::{Capped, N};
let n = N { written: 2, complete: true };
let capped = Capped::new("hi".to_string(), n);
assert!(capped.is_complete());
let n = N { written: 4, complete: false };
let capped = Capped::new("hell".to_string(), n);
assert!(!capped.is_complete());
sourcepub fn into_inner(self) -> T
pub fn into_inner(self) -> T
Returns the internal value.
Example
use rocket::data::{Capped, N};
let n = N { written: 2, complete: true };
let capped = Capped::new("hi".to_string(), n);
assert_eq!(capped.into_inner(), "hi");
Trait Implementations
sourceimpl<'r> FromData<'r> for Capped<String>
impl<'r> FromData<'r> for Capped<String>
sourcefn from_data<'life0, 'async_trait>(
req: &'r Request<'life0>,
data: Data<'r>
) -> Pin<Box<dyn Future<Output = Outcome<'r, Self>> + Send + 'async_trait>> where
'r: 'async_trait,
'life0: 'async_trait,
Self: 'async_trait,
fn from_data<'life0, 'async_trait>(
req: &'r Request<'life0>,
data: Data<'r>
) -> Pin<Box<dyn Future<Output = Outcome<'r, Self>> + Send + 'async_trait>> where
'r: 'async_trait,
'life0: 'async_trait,
Self: 'async_trait,
Asynchronously validates, parses, and converts an instance of Self
from the incoming request body data. Read more
sourceimpl<'r> FromData<'r> for Capped<&'r str>
impl<'r> FromData<'r> for Capped<&'r str>
sourcefn from_data<'life0, 'async_trait>(
req: &'r Request<'life0>,
data: Data<'r>
) -> Pin<Box<dyn Future<Output = Outcome<'r, Self>> + Send + 'async_trait>> where
'r: 'async_trait,
'life0: 'async_trait,
Self: 'async_trait,
fn from_data<'life0, 'async_trait>(
req: &'r Request<'life0>,
data: Data<'r>
) -> Pin<Box<dyn Future<Output = Outcome<'r, Self>> + Send + 'async_trait>> where
'r: 'async_trait,
'life0: 'async_trait,
Self: 'async_trait,
Asynchronously validates, parses, and converts an instance of Self
from the incoming request body data. Read more
sourceimpl<'r> FromData<'r> for Capped<&'r RawStr>
impl<'r> FromData<'r> for Capped<&'r RawStr>
sourcefn from_data<'life0, 'async_trait>(
req: &'r Request<'life0>,
data: Data<'r>
) -> Pin<Box<dyn Future<Output = Outcome<'r, Self>> + Send + 'async_trait>> where
'r: 'async_trait,
'life0: 'async_trait,
Self: 'async_trait,
fn from_data<'life0, 'async_trait>(
req: &'r Request<'life0>,
data: Data<'r>
) -> Pin<Box<dyn Future<Output = Outcome<'r, Self>> + Send + 'async_trait>> where
'r: 'async_trait,
'life0: 'async_trait,
Self: 'async_trait,
Asynchronously validates, parses, and converts an instance of Self
from the incoming request body data. Read more
sourceimpl<'impl0, 'r> FromData<'r> for Capped<Cow<'impl0, str>>
impl<'impl0, 'r> FromData<'r> for Capped<Cow<'impl0, str>>
sourcefn from_data<'life0, 'async_trait>(
req: &'r Request<'life0>,
data: Data<'r>
) -> Pin<Box<dyn Future<Output = Outcome<'r, Self>> + Send + 'async_trait>> where
'r: 'async_trait,
'life0: 'async_trait,
Self: 'async_trait,
fn from_data<'life0, 'async_trait>(
req: &'r Request<'life0>,
data: Data<'r>
) -> Pin<Box<dyn Future<Output = Outcome<'r, Self>> + Send + 'async_trait>> where
'r: 'async_trait,
'life0: 'async_trait,
Self: 'async_trait,
Asynchronously validates, parses, and converts an instance of Self
from the incoming request body data. Read more
sourceimpl<'r> FromData<'r> for Capped<&'r [u8]>
impl<'r> FromData<'r> for Capped<&'r [u8]>
sourcefn from_data<'life0, 'async_trait>(
req: &'r Request<'life0>,
data: Data<'r>
) -> Pin<Box<dyn Future<Output = Outcome<'r, Self>> + Send + 'async_trait>> where
'r: 'async_trait,
'life0: 'async_trait,
Self: 'async_trait,
fn from_data<'life0, 'async_trait>(
req: &'r Request<'life0>,
data: Data<'r>
) -> Pin<Box<dyn Future<Output = Outcome<'r, Self>> + Send + 'async_trait>> where
'r: 'async_trait,
'life0: 'async_trait,
Self: 'async_trait,
Asynchronously validates, parses, and converts an instance of Self
from the incoming request body data. Read more
sourceimpl<'r> FromData<'r> for Capped<Vec<u8>>
impl<'r> FromData<'r> for Capped<Vec<u8>>
sourcefn from_data<'life0, 'async_trait>(
req: &'r Request<'life0>,
data: Data<'r>
) -> Pin<Box<dyn Future<Output = Outcome<'r, Self>> + Send + 'async_trait>> where
'r: 'async_trait,
'life0: 'async_trait,
Self: 'async_trait,
fn from_data<'life0, 'async_trait>(
req: &'r Request<'life0>,
data: Data<'r>
) -> Pin<Box<dyn Future<Output = Outcome<'r, Self>> + Send + 'async_trait>> where
'r: 'async_trait,
'life0: 'async_trait,
Self: 'async_trait,
Asynchronously validates, parses, and converts an instance of Self
from the incoming request body data. Read more
sourceimpl<'impl0, 'r> FromData<'r> for Capped<TempFile<'impl0>>
impl<'impl0, 'r> FromData<'r> for Capped<TempFile<'impl0>>
sourcefn from_data<'life0, 'async_trait>(
req: &'r Request<'life0>,
data: Data<'r>
) -> Pin<Box<dyn Future<Output = Outcome<'r, Self>> + Send + 'async_trait>> where
'r: 'async_trait,
'life0: 'async_trait,
Self: 'async_trait,
fn from_data<'life0, 'async_trait>(
req: &'r Request<'life0>,
data: Data<'r>
) -> Pin<Box<dyn Future<Output = Outcome<'r, Self>> + Send + 'async_trait>> where
'r: 'async_trait,
'life0: 'async_trait,
Self: 'async_trait,
Asynchronously validates, parses, and converts an instance of Self
from the incoming request body data. Read more
sourceimpl<'v> FromFormField<'v> for Capped<&'v str>
impl<'v> FromFormField<'v> for Capped<&'v str>
sourcefn from_value(field: ValueField<'v>) -> Result<'v, Self>
fn from_value(field: ValueField<'v>) -> Result<'v, Self>
Parse a value of T
from a form value field. Read more
sourceimpl<'v> FromFormField<'v> for Capped<String>
impl<'v> FromFormField<'v> for Capped<String>
sourcefn from_value(field: ValueField<'v>) -> Result<'v, Self>
fn from_value(field: ValueField<'v>) -> Result<'v, Self>
Parse a value of T
from a form value field. Read more
sourceimpl<'v> FromFormField<'v> for Capped<Cow<'v, str>>
impl<'v> FromFormField<'v> for Capped<Cow<'v, str>>
sourcefn from_value(field: ValueField<'v>) -> Result<'v, Self>
fn from_value(field: ValueField<'v>) -> Result<'v, Self>
Parse a value of T
from a form value field. Read more
sourceimpl<'v> FromFormField<'v> for Capped<TempFile<'v>>
impl<'v> FromFormField<'v> for Capped<TempFile<'v>>
sourcefn from_value(field: ValueField<'v>) -> Result<Self, Errors<'v>>
fn from_value(field: ValueField<'v>) -> Result<Self, Errors<'v>>
Parse a value of T
from a form value field. Read more
sourceimpl<'r, 'o: 'r, T: Responder<'r, 'o>> Responder<'r, 'o> for Capped<T>
impl<'r, 'o: 'r, T: Responder<'r, 'o>> Responder<'r, 'o> for Capped<T>
sourcefn respond_to(self, request: &'r Request<'_>) -> Result<'o>
fn respond_to(self, request: &'r Request<'_>) -> Result<'o>
Returns Ok
if a Response
could be generated successfully. Otherwise,
returns an Err
with a failing Status
. Read more
impl<T: Copy> Copy for Capped<T>
Auto Trait Implementations
impl<T> RefUnwindSafe for Capped<T> where
T: RefUnwindSafe,
impl<T> Send for Capped<T> where
T: Send,
impl<T> Sync for Capped<T> where
T: Sync,
impl<T> Unpin for Capped<T> where
T: Unpin,
impl<T> UnwindSafe for Capped<T> where
T: UnwindSafe,
Blanket Implementations
impl<'a, T> AsTaggedExplicit<'a> for T where
T: 'a,
impl<'a, T> AsTaggedExplicit<'a> for T where
T: 'a,
fn explicit(self, class: Class, tag: u32) -> TaggedParser<'a, Explicit, Self>
impl<'a, T> AsTaggedImplicit<'a> for T where
T: 'a,
impl<'a, T> AsTaggedImplicit<'a> for T where
T: 'a,
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
sourceimpl<T> Instrument for T
impl<T> Instrument for T
sourcefn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
sourcefn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
impl<T> IntoCollection<T> for T
impl<T> IntoCollection<T> for T
fn into_collection<A>(self) -> SmallVec<A> where
A: Array<Item = T>,
fn into_collection<A>(self) -> SmallVec<A> where
A: Array<Item = T>,
Converts self
into a collection.
fn mapped<U, F, A>(self, f: F) -> SmallVec<A> where
F: FnMut(T) -> U,
A: Array<Item = U>,
sourceimpl<T> ToOwned for T where
T: Clone,
impl<T> ToOwned for T where
T: Clone,
type Owned = T
type Owned = T
The resulting type after obtaining ownership.
sourcefn clone_into(&self, target: &mut T)
fn clone_into(&self, target: &mut T)
toowned_clone_into
)Uses borrowed data to replace owned data, usually by cloning. Read more
impl<V, T> VZip<V> for T where
V: MultiLane<T>,
impl<V, T> VZip<V> for T where
V: MultiLane<T>,
fn vzip(self) -> V
sourceimpl<T> WithSubscriber for T
impl<T> WithSubscriber for T
sourcefn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> where
S: Into<Dispatch>,
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
sourcefn with_current_subscriber(self) -> WithDispatch<Self>
fn with_current_subscriber(self) -> WithDispatch<Self>
Attaches the current default Subscriber
to this type, returning a
WithDispatch
wrapper. Read more