pub struct Capabilities(/* private fields */);Expand description
A wrapper around Vec<Capability> that controls how capabilities are
serialized and built.
Serialization is a single comma-separated string (e.g. "/:rw,/pub/my-cool-app/:r"),
which is convenient for logs, URLs, or compact text payloads. It also comes
with a fluent builder (Capabilities::builder()).
Note: this does not remove length prefixes in binary encodings; if you need a varint-free trailing field in a custom binary format, implement a bespoke encoder/decoder instead of serde.
Implementations§
Source§impl Capabilities
impl Capabilities
Sourcepub fn normalize(self) -> Self
pub fn normalize(self) -> Self
Return a normalized capability list.
Normalization merges duplicate scopes, de-duplicates and sorts actions, and removes capabilities already covered by broader capabilities.
§Examples
use pubky_common::capabilities::{Capability, Capabilities};
let caps = Capabilities::from(vec![
Capability::read("/pub/"),
Capability::write("/pub/"),
Capability::read("/pub/file.txt"),
]);
assert_eq!(caps.normalize().to_string(), "/pub/:rw");Sourcepub fn contains(&self, capability: &Capability) -> bool
pub fn contains(&self, capability: &Capability) -> bool
Returns true if the list contains capability.
Sourcepub fn iter(&self) -> Iter<'_, Capability>
pub fn iter(&self) -> Iter<'_, Capability>
Returns an iterator over the slice of Capability.
Sourcepub fn builder() -> CapsBuilder
pub fn builder() -> CapsBuilder
Start a fluent builder for multiple capabilities.
use pubky_common::capabilities::Capabilities;
let caps = Capabilities::builder().read_write("/").finish();
assert_eq!(caps.to_string(), "/:rw");Sourcepub fn from_caps_url(url: &Url) -> Self
pub fn from_caps_url(url: &Url) -> Self
Parse capabilities from the caps query parameter of url.
Expects a comma-separated list of capability strings, e.g.:
?caps=/pub/my-cool-app/:rw,/foo:r
Invalid entries are ignored.
§Examples
let url = Url::parse("https://example/app?caps=/pub/my-cool-app/:rw,/foo:r").unwrap();
let caps = Capabilities::from_caps_url(&url);
assert!(!caps.is_empty());Sourcepub fn as_slice(&self) -> &[Capability]
pub fn as_slice(&self) -> &[Capability]
Borrow the inner capabilities as a slice without allocating.
Constant-time; returns a view into the existing buffer.
§Examples
use pubky_common::capabilities::{Capability, Capabilities};
let caps = Capabilities::from(vec![
Capability::read("/foo"),
Capability::write("/bar/"),
]);
let slice: &[Capability] = caps.as_slice();
assert_eq!(slice.len(), 2);Trait Implementations§
Source§impl Clone for Capabilities
impl Clone for Capabilities
Source§fn clone(&self) -> Capabilities
fn clone(&self) -> Capabilities
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for Capabilities
impl Debug for Capabilities
Source§impl Default for Capabilities
impl Default for Capabilities
Source§fn default() -> Capabilities
fn default() -> Capabilities
Source§impl<'de> Deserialize<'de> for Capabilities
impl<'de> Deserialize<'de> for Capabilities
Source§fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>where
D: Deserializer<'de>,
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>where
D: Deserializer<'de>,
Source§impl Display for Capabilities
impl Display for Capabilities
Source§impl From<Capabilities> for Vec<Capability>
impl From<Capabilities> for Vec<Capability>
Source§fn from(value: Capabilities) -> Self
fn from(value: Capabilities) -> Self
Source§impl From<Vec<Capability>> for Capabilities
impl From<Vec<Capability>> for Capabilities
Source§fn from(value: Vec<Capability>) -> Self
fn from(value: Vec<Capability>) -> Self
Source§impl PartialEq for Capabilities
impl PartialEq for Capabilities
Source§fn eq(&self, other: &Capabilities) -> bool
fn eq(&self, other: &Capabilities) -> bool
self and other values to be equal, and is used by ==.