pub struct OwnedCapability<const MCL: usize, const MCC: usize, const MPL: usize, NamespacePublicKey, NamespaceSignature, UserPublicKey, UserSignature>where
NamespacePublicKey: McNamespacePublicKey + Verifier<NamespaceSignature>,
NamespaceSignature: EncodableSync + EncodableKnownSize,
UserPublicKey: McPublicUserKey<UserSignature>,
UserSignature: EncodableSync + EncodableKnownSize,{ /* private fields */ }
Expand description
A capability that implements owned namespaces.
Implementations§
Source§impl<const MCL: usize, const MCC: usize, const MPL: usize, NamespacePublicKey, NamespaceSignature, UserPublicKey, UserSignature> OwnedCapability<MCL, MCC, MPL, NamespacePublicKey, NamespaceSignature, UserPublicKey, UserSignature>where
NamespacePublicKey: McNamespacePublicKey + Verifier<NamespaceSignature>,
NamespaceSignature: EncodableSync + EncodableKnownSize + Clone,
UserPublicKey: McPublicUserKey<UserSignature>,
UserSignature: EncodableSync + EncodableKnownSize + Clone,
impl<const MCL: usize, const MCC: usize, const MPL: usize, NamespacePublicKey, NamespaceSignature, UserPublicKey, UserSignature> OwnedCapability<MCL, MCC, MPL, NamespacePublicKey, NamespaceSignature, UserPublicKey, UserSignature>where
NamespacePublicKey: McNamespacePublicKey + Verifier<NamespaceSignature>,
NamespaceSignature: EncodableSync + EncodableKnownSize + Clone,
UserPublicKey: McPublicUserKey<UserSignature>,
UserSignature: EncodableSync + EncodableKnownSize + Clone,
Sourcepub fn new<NamespaceSecret>(
namespace_key: NamespacePublicKey,
namespace_secret: &NamespaceSecret,
user_key: UserPublicKey,
access_mode: AccessMode,
) -> Result<Self, OwnedCapabilityCreationError<NamespacePublicKey>>where
NamespaceSecret: Signer<NamespaceSignature>,
pub fn new<NamespaceSecret>(
namespace_key: NamespacePublicKey,
namespace_secret: &NamespaceSecret,
user_key: UserPublicKey,
access_mode: AccessMode,
) -> Result<Self, OwnedCapabilityCreationError<NamespacePublicKey>>where
NamespaceSecret: Signer<NamespaceSignature>,
Sourcepub fn from_existing(
namespace_key: NamespacePublicKey,
user_key: UserPublicKey,
initial_authorisation: NamespaceSignature,
access_mode: AccessMode,
) -> Result<Self, OwnedCapabilityCreationError<NamespacePublicKey>>
pub fn from_existing( namespace_key: NamespacePublicKey, user_key: UserPublicKey, initial_authorisation: NamespaceSignature, access_mode: AccessMode, ) -> Result<Self, OwnedCapabilityCreationError<NamespacePublicKey>>
Creates an OwnedCapability
using an existing authorisation (e.g. one received over the network), or return an error if the signature was not created by the namespace key.
Sourcepub fn delegate<UserSecretKey>(
&self,
secret_key: &UserSecretKey,
new_user: &UserPublicKey,
new_area: &Area<MCL, MCC, MPL, UserPublicKey>,
) -> Result<Self, FailedDelegationError<MCL, MCC, MPL, UserPublicKey>>where
UserSecretKey: Signer<UserSignature>,
pub fn delegate<UserSecretKey>(
&self,
secret_key: &UserSecretKey,
new_user: &UserPublicKey,
new_area: &Area<MCL, MCC, MPL, UserPublicKey>,
) -> Result<Self, FailedDelegationError<MCL, MCC, MPL, UserPublicKey>>where
UserSecretKey: Signer<UserSignature>,
Delegates this capability to a new UserPublicKey
for a given willow_data_model::grouping::Area
.
Will fail if the area is not included by this capability’s granted area, or if the given secret key does not correspond to the capability’s receiver.
Sourcepub fn needs_subspace_cap(&self) -> bool
pub fn needs_subspace_cap(&self) -> bool
Returns whether this capability needs a complementing crate::McSubspaceCapability
(definition) to in order to be fully authorised by the Willow General Sync Protocol.
Sourcepub fn append_existing_delegation(
&mut self,
delegation: Delegation<MCL, MCC, MPL, UserPublicKey, UserSignature>,
) -> Result<(), InvalidDelegationError<MCL, MCC, MPL, UserPublicKey, UserSignature>>
pub fn append_existing_delegation( &mut self, delegation: Delegation<MCL, MCC, MPL, UserPublicKey, UserSignature>, ) -> Result<(), InvalidDelegationError<MCL, MCC, MPL, UserPublicKey, UserSignature>>
Appends an existing delegation to an existing capability, or return an error if the delegation is invalid.
Sourcepub fn access_mode(&self) -> AccessMode
pub fn access_mode(&self) -> AccessMode
Returns the kind of access this capability grants.
Sourcepub fn receiver(&self) -> &UserPublicKey
pub fn receiver(&self) -> &UserPublicKey
Returns the public key of the user to whom this capability grants access.
Sourcepub fn granted_namespace(&self) -> &NamespacePublicKey
pub fn granted_namespace(&self) -> &NamespacePublicKey
Returns the public key of the namespace for which this capability grants access.
Sourcepub fn granted_area(&self) -> Area<MCL, MCC, MPL, UserPublicKey>
pub fn granted_area(&self) -> Area<MCL, MCC, MPL, UserPublicKey>
Returns Area
for which this capability grants access.
Sourcepub fn delegations(
&self,
) -> impl ExactSizeIterator<Item = &Delegation<MCL, MCC, MPL, UserPublicKey, UserSignature>>
pub fn delegations( &self, ) -> impl ExactSizeIterator<Item = &Delegation<MCL, MCC, MPL, UserPublicKey, UserSignature>>
Returns a slice of all Delegation
s made to this capability.
Sourcepub fn delegations_len(&self) -> usize
pub fn delegations_len(&self) -> usize
Returns the number of delegations present on this capability.
Sourcepub fn progenitor(&self) -> &UserPublicKey
pub fn progenitor(&self) -> &UserPublicKey
Returns the public key of the very first user this capability was issued to.
Returns the original signature authorising this namespace capability.
Sourcepub unsafe fn new_unchecked(
access_mode: AccessMode,
namespace_key: NamespacePublicKey,
user_key: UserPublicKey,
initial_authorisation: NamespaceSignature,
delegations: Vec<Delegation<MCL, MCC, MPL, UserPublicKey, UserSignature>>,
) -> Self
pub unsafe fn new_unchecked( access_mode: AccessMode, namespace_key: NamespacePublicKey, user_key: UserPublicKey, initial_authorisation: NamespaceSignature, delegations: Vec<Delegation<MCL, MCC, MPL, UserPublicKey, UserSignature>>, ) -> Self
Returns a OwnedCapability
without checking if its initial authorisation or delegations are valid.
§Safety
Calling this method with an invalid initial authorisation or delegation is immediate undefined behaviour!
Trait Implementations§
Source§impl<const MCL: usize, const MCC: usize, const MPL: usize, NamespacePublicKey, NamespaceSignature, UserPublicKey, UserSignature> Clone for OwnedCapability<MCL, MCC, MPL, NamespacePublicKey, NamespaceSignature, UserPublicKey, UserSignature>where
NamespacePublicKey: McNamespacePublicKey + Verifier<NamespaceSignature> + Clone,
NamespaceSignature: EncodableSync + EncodableKnownSize + Clone,
UserPublicKey: McPublicUserKey<UserSignature> + Clone,
UserSignature: EncodableSync + EncodableKnownSize + Clone,
impl<const MCL: usize, const MCC: usize, const MPL: usize, NamespacePublicKey, NamespaceSignature, UserPublicKey, UserSignature> Clone for OwnedCapability<MCL, MCC, MPL, NamespacePublicKey, NamespaceSignature, UserPublicKey, UserSignature>where
NamespacePublicKey: McNamespacePublicKey + Verifier<NamespaceSignature> + Clone,
NamespaceSignature: EncodableSync + EncodableKnownSize + Clone,
UserPublicKey: McPublicUserKey<UserSignature> + Clone,
UserSignature: EncodableSync + EncodableKnownSize + Clone,
Source§fn clone(
&self,
) -> OwnedCapability<MCL, MCC, MPL, NamespacePublicKey, NamespaceSignature, UserPublicKey, UserSignature>
fn clone( &self, ) -> OwnedCapability<MCL, MCC, MPL, NamespacePublicKey, NamespaceSignature, UserPublicKey, UserSignature>
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreSource§impl<const MCL: usize, const MCC: usize, const MPL: usize, NamespacePublicKey, NamespaceSignature, UserPublicKey, UserSignature> Debug for OwnedCapability<MCL, MCC, MPL, NamespacePublicKey, NamespaceSignature, UserPublicKey, UserSignature>where
NamespacePublicKey: McNamespacePublicKey + Verifier<NamespaceSignature> + Debug,
NamespaceSignature: EncodableSync + EncodableKnownSize + Debug,
UserPublicKey: McPublicUserKey<UserSignature> + Debug,
UserSignature: EncodableSync + EncodableKnownSize + Debug,
impl<const MCL: usize, const MCC: usize, const MPL: usize, NamespacePublicKey, NamespaceSignature, UserPublicKey, UserSignature> Debug for OwnedCapability<MCL, MCC, MPL, NamespacePublicKey, NamespaceSignature, UserPublicKey, UserSignature>where
NamespacePublicKey: McNamespacePublicKey + Verifier<NamespaceSignature> + Debug,
NamespaceSignature: EncodableSync + EncodableKnownSize + Debug,
UserPublicKey: McPublicUserKey<UserSignature> + Debug,
UserSignature: EncodableSync + EncodableKnownSize + Debug,
Source§impl<const MCL: usize, const MCC: usize, const MPL: usize, NamespacePublicKey, NamespaceSignature, UserPublicKey, UserSignature> Hash for OwnedCapability<MCL, MCC, MPL, NamespacePublicKey, NamespaceSignature, UserPublicKey, UserSignature>where
NamespacePublicKey: McNamespacePublicKey + Verifier<NamespaceSignature> + Hash,
NamespaceSignature: EncodableSync + EncodableKnownSize + Hash,
UserPublicKey: McPublicUserKey<UserSignature> + Hash,
UserSignature: EncodableSync + EncodableKnownSize + Hash,
impl<const MCL: usize, const MCC: usize, const MPL: usize, NamespacePublicKey, NamespaceSignature, UserPublicKey, UserSignature> Hash for OwnedCapability<MCL, MCC, MPL, NamespacePublicKey, NamespaceSignature, UserPublicKey, UserSignature>where
NamespacePublicKey: McNamespacePublicKey + Verifier<NamespaceSignature> + Hash,
NamespaceSignature: EncodableSync + EncodableKnownSize + Hash,
UserPublicKey: McPublicUserKey<UserSignature> + Hash,
UserSignature: EncodableSync + EncodableKnownSize + Hash,
Source§impl<const MCL: usize, const MCC: usize, const MPL: usize, NamespacePublicKey, NamespaceSignature, UserPublicKey, UserSignature> PartialEq for OwnedCapability<MCL, MCC, MPL, NamespacePublicKey, NamespaceSignature, UserPublicKey, UserSignature>where
NamespacePublicKey: McNamespacePublicKey + Verifier<NamespaceSignature> + PartialEq,
NamespaceSignature: EncodableSync + EncodableKnownSize + PartialEq,
UserPublicKey: McPublicUserKey<UserSignature> + PartialEq,
UserSignature: EncodableSync + EncodableKnownSize + PartialEq,
impl<const MCL: usize, const MCC: usize, const MPL: usize, NamespacePublicKey, NamespaceSignature, UserPublicKey, UserSignature> PartialEq for OwnedCapability<MCL, MCC, MPL, NamespacePublicKey, NamespaceSignature, UserPublicKey, UserSignature>where
NamespacePublicKey: McNamespacePublicKey + Verifier<NamespaceSignature> + PartialEq,
NamespaceSignature: EncodableSync + EncodableKnownSize + PartialEq,
UserPublicKey: McPublicUserKey<UserSignature> + PartialEq,
UserSignature: EncodableSync + EncodableKnownSize + PartialEq,
Source§fn eq(
&self,
other: &OwnedCapability<MCL, MCC, MPL, NamespacePublicKey, NamespaceSignature, UserPublicKey, UserSignature>,
) -> bool
fn eq( &self, other: &OwnedCapability<MCL, MCC, MPL, NamespacePublicKey, NamespaceSignature, UserPublicKey, UserSignature>, ) -> bool
self
and other
values to be equal, and is used by ==
.Source§impl<const MCL: usize, const MCC: usize, const MPL: usize, N: McNamespacePublicKey + Verifier<NamespaceSignature>, NamespaceSignature: Decodable + EncodableSync + EncodableKnownSize + Clone, UserPublicKey: McPublicUserKey<UserSignature>, UserSignature: EncodableSync + EncodableKnownSize + Clone + Decodable> RelativeDecodable<PersonalPrivateInterest<MCL, MCC, MPL, N, UserPublicKey>, Blame> for OwnedCapability<MCL, MCC, MPL, N, NamespaceSignature, UserPublicKey, UserSignature>where
Blame: From<N::ErrorReason> + From<NamespaceSignature::ErrorReason> + From<UserPublicKey::ErrorReason> + From<UserSignature::ErrorReason>,
impl<const MCL: usize, const MCC: usize, const MPL: usize, N: McNamespacePublicKey + Verifier<NamespaceSignature>, NamespaceSignature: Decodable + EncodableSync + EncodableKnownSize + Clone, UserPublicKey: McPublicUserKey<UserSignature>, UserSignature: EncodableSync + EncodableKnownSize + Clone + Decodable> RelativeDecodable<PersonalPrivateInterest<MCL, MCC, MPL, N, UserPublicKey>, Blame> for OwnedCapability<MCL, MCC, MPL, N, NamespaceSignature, UserPublicKey, UserSignature>where
Blame: From<N::ErrorReason> + From<NamespaceSignature::ErrorReason> + From<UserPublicKey::ErrorReason> + From<UserSignature::ErrorReason>,
Source§async fn relative_decode<P>(
producer: &mut P,
r: &PersonalPrivateInterest<MCL, MCC, MPL, N, UserPublicKey>,
) -> Result<Self, DecodeError<P::Final, P::Error, Blame>>
async fn relative_decode<P>( producer: &mut P, r: &PersonalPrivateInterest<MCL, MCC, MPL, N, UserPublicKey>, ) -> Result<Self, DecodeError<P::Final, P::Error, Blame>>
Self
, or yields an error if the producer does not produce a valid encoding.Source§fn relative_decode_from_slice(
enc: &[u8],
r: &RelativeTo,
) -> impl Future<Output = Result<Self, DecodeError<(), Infallible, ErrorReason>>>
fn relative_decode_from_slice( enc: &[u8], r: &RelativeTo, ) -> impl Future<Output = Result<Self, DecodeError<(), Infallible, ErrorReason>>>
Source§impl<const MCL: usize, const MCC: usize, const MPL: usize, N: McNamespacePublicKey + Verifier<NamespaceSignature>, NamespaceSignature: EncodableSync + EncodableKnownSize + Clone, UserPublicKey: McPublicUserKey<UserSignature> + Encodable, UserSignature: EncodableSync + EncodableKnownSize + Clone> RelativeEncodable<PersonalPrivateInterest<MCL, MCC, MPL, N, UserPublicKey>> for OwnedCapability<MCL, MCC, MPL, N, NamespaceSignature, UserPublicKey, UserSignature>
impl<const MCL: usize, const MCC: usize, const MPL: usize, N: McNamespacePublicKey + Verifier<NamespaceSignature>, NamespaceSignature: EncodableSync + EncodableKnownSize + Clone, UserPublicKey: McPublicUserKey<UserSignature> + Encodable, UserSignature: EncodableSync + EncodableKnownSize + Clone> RelativeEncodable<PersonalPrivateInterest<MCL, MCC, MPL, N, UserPublicKey>> for OwnedCapability<MCL, MCC, MPL, N, NamespaceSignature, UserPublicKey, UserSignature>
Source§async fn relative_encode<C>(
&self,
consumer: &mut C,
r: &PersonalPrivateInterest<MCL, MCC, MPL, N, UserPublicKey>,
) -> Result<(), C::Error>where
C: BulkConsumer<Item = u8>,
async fn relative_encode<C>(
&self,
consumer: &mut C,
r: &PersonalPrivateInterest<MCL, MCC, MPL, N, UserPublicKey>,
) -> Result<(), C::Error>where
C: BulkConsumer<Item = u8>,
&self
into the given consumer.Source§fn relative_encode_into_vec(
&self,
r: &RelativeTo,
) -> impl Future<Output = Vec<u8>>
fn relative_encode_into_vec( &self, r: &RelativeTo, ) -> impl Future<Output = Vec<u8>>
impl<const MCL: usize, const MCC: usize, const MPL: usize, NamespacePublicKey, NamespaceSignature, UserPublicKey, UserSignature> Eq for OwnedCapability<MCL, MCC, MPL, NamespacePublicKey, NamespaceSignature, UserPublicKey, UserSignature>where
NamespacePublicKey: McNamespacePublicKey + Verifier<NamespaceSignature> + Eq,
NamespaceSignature: EncodableSync + EncodableKnownSize + Eq,
UserPublicKey: McPublicUserKey<UserSignature> + Eq,
UserSignature: EncodableSync + EncodableKnownSize + Eq,
impl<const MCL: usize, const MCC: usize, const MPL: usize, NamespacePublicKey, NamespaceSignature, UserPublicKey, UserSignature> StructuralPartialEq for OwnedCapability<MCL, MCC, MPL, NamespacePublicKey, NamespaceSignature, UserPublicKey, UserSignature>where
NamespacePublicKey: McNamespacePublicKey + Verifier<NamespaceSignature>,
NamespaceSignature: EncodableSync + EncodableKnownSize,
UserPublicKey: McPublicUserKey<UserSignature>,
UserSignature: EncodableSync + EncodableKnownSize,
Auto Trait Implementations§
impl<const MCL: usize, const MCC: usize, const MPL: usize, NamespacePublicKey, NamespaceSignature, UserPublicKey, UserSignature> Freeze for OwnedCapability<MCL, MCC, MPL, NamespacePublicKey, NamespaceSignature, UserPublicKey, UserSignature>
impl<const MCL: usize, const MCC: usize, const MPL: usize, NamespacePublicKey, NamespaceSignature, UserPublicKey, UserSignature> RefUnwindSafe for OwnedCapability<MCL, MCC, MPL, NamespacePublicKey, NamespaceSignature, UserPublicKey, UserSignature>where
NamespacePublicKey: RefUnwindSafe,
UserPublicKey: RefUnwindSafe,
NamespaceSignature: RefUnwindSafe,
UserSignature: RefUnwindSafe,
impl<const MCL: usize, const MCC: usize, const MPL: usize, NamespacePublicKey, NamespaceSignature, UserPublicKey, UserSignature> Send for OwnedCapability<MCL, MCC, MPL, NamespacePublicKey, NamespaceSignature, UserPublicKey, UserSignature>
impl<const MCL: usize, const MCC: usize, const MPL: usize, NamespacePublicKey, NamespaceSignature, UserPublicKey, UserSignature> Sync for OwnedCapability<MCL, MCC, MPL, NamespacePublicKey, NamespaceSignature, UserPublicKey, UserSignature>
impl<const MCL: usize, const MCC: usize, const MPL: usize, NamespacePublicKey, NamespaceSignature, UserPublicKey, UserSignature> Unpin for OwnedCapability<MCL, MCC, MPL, NamespacePublicKey, NamespaceSignature, UserPublicKey, UserSignature>
impl<const MCL: usize, const MCC: usize, const MPL: usize, NamespacePublicKey, NamespaceSignature, UserPublicKey, UserSignature> UnwindSafe for OwnedCapability<MCL, MCC, MPL, NamespacePublicKey, NamespaceSignature, UserPublicKey, UserSignature>where
NamespacePublicKey: UnwindSafe,
UserPublicKey: UnwindSafe,
NamespaceSignature: UnwindSafe,
UserSignature: UnwindSafe,
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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more