use core::fmt;
#[cfg(feature = "dev")]
use arbitrary::Arbitrary;
use crate::prelude::*;
mod possibly_valid_write_capability;
pub use possibly_valid_write_capability::*;
mod possibly_valid_read_capability;
pub use possibly_valid_read_capability::*;
pub use meadowcap::raw::{AccessMode, InvalidCapability};
wrapper! {
#[derive(PartialEq, Eq, Clone)]
#[cfg_attr(feature = "dev", derive(Arbitrary))]
CommunalGenesis; meadowcap::raw::CommunalGenesis<NamespaceId, SubspaceId>
}
impl fmt::Debug for CommunalGenesis {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
self.0.fmt(f)
}
}
wrapper! {
#[derive(PartialEq, Eq, Clone)]
#[cfg_attr(feature = "dev", derive(Arbitrary))]
OwnedGenesis; meadowcap::raw::OwnedGenesis<NamespaceId, NamespaceSignature, SubspaceId>
}
impl fmt::Debug for OwnedGenesis {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
self.0.fmt(f)
}
}
wrapper! {
#[derive(PartialEq, Eq, Clone)]
#[cfg_attr(feature = "dev", derive(Arbitrary))]
Genesis; meadowcap::raw::Genesis<NamespaceId, NamespaceSignature, SubspaceId>
}
impl fmt::Debug for Genesis {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
self.0.fmt(f)
}
}
impl Genesis {
pub fn access_mode(&self) -> AccessMode {
self.0.access_mode()
}
pub fn namespace_key(&self) -> &NamespaceId {
self.0.namespace_key()
}
pub fn user_key(&self) -> &SubspaceId {
self.0.user_key()
}
pub fn is_owned(&self) -> bool {
self.0.is_owned()
}
pub fn includes_area(&self, area: &Area) -> bool {
self.0.includes_area(area.into())
}
pub fn is_valid(&self) -> bool {
self.0.is_valid()
}
}
wrapper! {
#[derive(PartialEq, Eq, Clone)]
#[cfg_attr(feature = "dev", derive(Arbitrary))]
Delegation; meadowcap::raw::Delegation<MCL, MCC, MPL, SubspaceId, SubspaceSignature>
}
impl fmt::Debug for Delegation {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
self.0.fmt(f)
}
}
impl Delegation {
pub fn new(area: Area, user: SubspaceId, signature: SubspaceSignature) -> Self {
(meadowcap::raw::Delegation {
area: area.into(),
user,
signature,
})
.into()
}
pub fn area(&self) -> &Area {
(&self.0.area).into()
}
pub fn set_area(&mut self, area: Area) {
self.0.area = area.into();
}
pub fn user(&self) -> &SubspaceId {
&self.0.user
}
pub fn set_user(&mut self, user: SubspaceId) {
self.0.user = user;
}
pub fn signature(&self) -> &SubspaceSignature {
&self.0.signature
}
pub fn set_signature(&mut self, signature: SubspaceSignature) {
self.0.signature = signature;
}
pub fn into_parts(self) -> (Area, SubspaceId, SubspaceSignature) {
(self.0.area.into(), self.0.user, self.0.signature)
}
}