pub struct FnPrepare<T: DeepView + ?Sized, Spec: SpecByteLen<T = T::V> + Consistency<Val = T::V>, Exec: Fn(&T) -> Result<usize, PreSerializeError>> {
pub exec_fn: Exec,
pub spec_fn: Ghost<Spec>,
pub _marker: PhantomData<T>,
}Expand description
Pairs an executable preparation closure with its consistency and byte-length specification.
Fields§
§exec_fn: Exec§spec_fn: Ghost<Spec>§_marker: PhantomData<T>Implementations§
Source§impl<T, Spec, Exec> FnPrepare<T, Spec, Exec>where
T: DeepView + ?Sized,
Spec: SpecByteLen<T = T::V> + Consistency<Val = T::V>,
Exec: Fn(&T) -> Result<usize, PreSerializeError>,
impl<T, Spec, Exec> FnPrepare<T, Spec, Exec>where
T: DeepView + ?Sized,
Spec: SpecByteLen<T = T::V> + Consistency<Val = T::V>,
Exec: Fn(&T) -> Result<usize, PreSerializeError>,
Sourcepub exec fn new(exec_fn: Exec, Ghost(spec_fn): Ghost<Spec>) -> prepare : Self
pub exec fn new(exec_fn: Exec, Ghost(spec_fn): Ghost<Spec>) -> prepare : Self
requires
forall |value: &T| #[trigger] call_requires(exec_fn, (value,)),forall |value: &T, result: Result<usize, PreSerializeError>| {
#[trigger] call_ensures(exec_fn, (value,), result)
==> (result matches Ok(
len,
) ==> {
&&& spec_fn.consistent(value.deep_view())
&&& len == spec_fn.byte_len(value.deep_view())
})
},ensuresprepare.exec_inv(),prepare.spec_fn == spec_fn,Trait Implementations§
Source§impl<T, Spec, Exec> Consistency for FnPrepare<T, Spec, Exec>where
T: DeepView + ?Sized,
Spec: SpecByteLen<T = T::V> + Consistency<Val = T::V>,
Exec: Fn(&T) -> Result<usize, PreSerializeError>,
impl<T, Spec, Exec> Consistency for FnPrepare<T, Spec, Exec>where
T: DeepView + ?Sized,
Spec: SpecByteLen<T = T::V> + Consistency<Val = T::V>,
Exec: Fn(&T) -> Result<usize, PreSerializeError>,
Source§impl<T, Spec, Exec> Prepare<T> for FnPrepare<T, Spec, Exec>where
T: DeepView + ?Sized,
Spec: SpecByteLen<T = T::V> + Consistency<Val = T::V>,
Exec: Fn(&T) -> Result<usize, PreSerializeError>,
impl<T, Spec, Exec> Prepare<T> for FnPrepare<T, Spec, Exec>where
T: DeepView + ?Sized,
Spec: SpecByteLen<T = T::V> + Consistency<Val = T::V>,
Exec: Fn(&T) -> Result<usize, PreSerializeError>,
Source§open spec fn exec_inv(&self) -> bool
open spec fn exec_inv(&self) -> bool
{
&&& forall |value: &T| #[trigger] call_requires(self.exec_fn, (value,))
&&& forall |value: &T, result: Result<usize, PreSerializeError>| {
#[trigger] call_ensures(self.exec_fn, (value,), result)
==> (result matches Ok(
len,
) ==> {
&&& self.spec_fn@.consistent(value.deep_view())
&&& len == self.spec_fn@.byte_len(value.deep_view())
})
}
}Source§impl<T, Spec, Exec> SpecByteLen for FnPrepare<T, Spec, Exec>where
T: DeepView + ?Sized,
Spec: SpecByteLen<T = T::V> + Consistency<Val = T::V>,
Exec: Fn(&T) -> Result<usize, PreSerializeError>,
impl<T, Spec, Exec> SpecByteLen for FnPrepare<T, Spec, Exec>where
T: DeepView + ?Sized,
Spec: SpecByteLen<T = T::V> + Consistency<Val = T::V>,
Exec: Fn(&T) -> Result<usize, PreSerializeError>,
Auto Trait Implementations§
impl<T, Spec, Exec> Freeze for FnPrepare<T, Spec, Exec>
impl<T, Spec, Exec> RefUnwindSafe for FnPrepare<T, Spec, Exec>
impl<T, Spec, Exec> Send for FnPrepare<T, Spec, Exec>
impl<T, Spec, Exec> Sync for FnPrepare<T, Spec, Exec>
impl<T, Spec, Exec> Unpin for FnPrepare<T, Spec, Exec>
impl<T, Spec, Exec> UnsafeUnpin for FnPrepare<T, Spec, Exec>where
Exec: UnsafeUnpin,
T: ?Sized,
impl<T, Spec, Exec> UnwindSafe for FnPrepare<T, Spec, Exec>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more