Struct Write

Source
pub struct Write<P: Key> { /* private fields */ }
Expand description

Middleware for data that persists between Requests for data which mostly needs to be written instead of read.

The data is stored behind a Mutex, so only one request at a time can access the data. This is more performant than State in the case where most uses of the data require a write lock.

Write can be linked as BeforeMiddleware to add data to the Request extensions and it can be linked as an AfterMiddleware to add data to the Response extensions.

Write also implements Plugin, so the data stored within can be accessed through request.get::<Write<P>>() as an Arc<Mutex<P::Value>>.

Implementations§

Source§

impl<P: Key> Write<P>
where P::Value: Send,

Source

pub fn both<T>(start: T) -> (Write<P>, Write<P>)
where T: PersistentInto<Arc<Mutex<P::Value>>>,

Construct a new pair of Write that can be passed directly to Chain::link.

The data is initialized with the passed-in value.

Examples found in repository?
examples/hitcounter.rs (line 25)
23fn main() {
24    let mut chain = Chain::new(serve_hits);
25    chain.link(Write::<HitCounter>::both(0));
26    Iron::new(chain).http("localhost:3000").unwrap();
27}
Source

pub fn one<T>(start: T) -> Write<P>
where T: PersistentInto<Arc<Mutex<P::Value>>>,

Construct a new Write that can be passed directly to Chain::link_before or Chain::link_after.

The data is initialized with the passed-in value.

Trait Implementations§

Source§

impl<P: Key> AfterMiddleware for Write<P>
where P::Value: Send,

Source§

fn after(&self, _: &mut Request<'_, '_>, res: Response) -> IronResult<Response>

Do whatever post-processing this middleware should do.
Source§

fn catch( &self, _: &mut Request<'_, '_>, err: IronError, ) -> Result<Response, IronError>

Respond to an error thrown by previous AfterMiddleware, the Handler, or a BeforeMiddleware. Read more
Source§

impl<P: Key> BeforeMiddleware for Write<P>
where P::Value: Send,

Source§

fn before(&self, req: &mut Request<'_, '_>) -> IronResult<()>

Do whatever work this middleware should do with a Request object.
Source§

fn catch( &self, _: &mut Request<'_, '_>, err: IronError, ) -> Result<(), IronError>

Respond to an error thrown by a previous BeforeMiddleware. Read more
Source§

impl<P: Key> Clone for Write<P>
where P::Value: Send,

Source§

fn clone(&self) -> Write<P>

Returns a copy of the value. Read more
1.0.0 · Source§

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

Performs copy-assignment from source. Read more
Source§

impl<P: Key> Key for Write<P>
where P::Value: 'static,

Source§

type Value = Arc<Mutex<<P as Key>::Value>>

The value type associated with this key type.
Source§

impl<'a, 'b, P: Key> Plugin<Request<'a, 'b>> for Write<P>
where P::Value: Send,

Source§

type Error = PersistentError

The error type associated with this plugin.
Source§

fn eval( req: &mut Request<'a, 'b>, ) -> Result<Arc<Mutex<P::Value>>, PersistentError>

Create the plugin from an instance of the extended type. Read more

Auto Trait Implementations§

§

impl<P> Freeze for Write<P>

§

impl<P> RefUnwindSafe for Write<P>

§

impl<P> Send for Write<P>
where <P as Key>::Value: Send,

§

impl<P> Sync for Write<P>
where <P as Key>::Value: Send,

§

impl<P> Unpin for Write<P>

§

impl<P> UnwindSafe for Write<P>

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> CloneAny for T
where T: Any + Clone,

Source§

fn clone_any(&self) -> Box<dyn CloneAny>

Source§

fn clone_any_send(&self) -> Box<dyn CloneAny + Send>
where T: Send,

Source§

fn clone_any_sync(&self) -> Box<dyn CloneAny + Sync>
where T: Sync,

Source§

fn clone_any_send_sync(&self) -> Box<dyn CloneAny + Send + Sync>
where T: Send + Sync,

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, 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> PersistentInto<Arc<Mutex<T>>> for T

Source§

fn persistent_into(self) -> Arc<Mutex<T>>

Convert self into a value of type T.
Source§

impl<T> PersistentInto<Arc<RwLock<T>>> for T

Source§

fn persistent_into(self) -> Arc<RwLock<T>>

Convert self into a value of type T.
Source§

impl<T> PersistentInto<Arc<T>> for T

Source§

fn persistent_into(self) -> Arc<T>

Convert self into a value of type T.
Source§

impl<T> PersistentInto<T> for T

Source§

fn persistent_into(self) -> T

Convert self into a value of type T.
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<T> Typeable for T
where T: Any,

Source§

fn get_type(&self) -> TypeId

Get the TypeId of this object.
Source§

impl<T> UnsafeAny for T
where T: Any,