pub mod exec;
pub mod proof;
pub mod spec;
use vstd::prelude::*;
verus! {
#[derive(Copy)]
pub struct Mapped<Inner, M> {
pub inner: Inner,
pub mapper: M,
}
impl<Inner: Clone, M: Clone> Clone for Mapped<Inner, M> {
fn clone(&self) -> (cloned: Self)
ensures
call_ensures(Inner::clone, (&self.inner,), cloned.inner),
call_ensures(M::clone, (&self.mapper,), cloned.mapper),
{
Mapped { inner: self.inner.clone(), mapper: self.mapper.clone() }
}
}
#[derive(Copy)]
pub struct TryMap<Inner, M> {
pub inner: Inner,
pub mapper: M,
}
impl<Inner: Clone, M: Clone> Clone for TryMap<Inner, M> {
fn clone(&self) -> (cloned: Self)
ensures
call_ensures(Inner::clone, (&self.inner,), cloned.inner),
call_ensures(M::clone, (&self.mapper,), cloned.mapper),
{
TryMap { inner: self.inner.clone(), mapper: self.mapper.clone() }
}
}
}