pub struct Capabilities(pub Vec<Capability>);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.
Tuple Fields§
§0: Vec<Capability>Implementations§
Source§impl Capabilities
impl Capabilities
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 from_url(url: &Url) -> Self
pub fn from_url(url: &Url) -> Self
Parse capabilities from the caps query parameter.
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_url(&url);
assert!(!caps.is_empty());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 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(vec![
Capability::read("/foo"),
Capability::write("/bar/"),
]);
let slice: &[Capability] = caps.as_slice();
assert_eq!(slice.len(), 2);Sourcepub fn to_vec(&self) -> Vec<Capability>
pub fn to_vec(&self) -> Vec<Capability>
Clone the inner capabilities into an owned Vec<Capability>.
Allocates and performs an O(n) clone of the elements. Use when
ownership is required by downstream APIs.
use pubky_common::capabilities::{Capability, Capabilities};
let caps = Capabilities(vec![Capability::read("/")]);
let owned: Vec<Capability> = caps.to_vec();
assert_eq!(owned, vec![Capability::read("/")]);Trait Implementations§
Source§impl Clone for Capabilities
impl Clone for Capabilities
Source§fn clone(&self) -> Capabilities
fn clone(&self) -> Capabilities
1.0.0 · 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<&Url> for Capabilities
Allow Capabilities::from(&url) using the default caps key.
impl From<&Url> for Capabilities
Allow Capabilities::from(&url) using the default caps key.
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<Url> for Capabilities
Allow Capabilities::from(url) (by value) using the default caps key.
impl From<Url> for Capabilities
Allow Capabilities::from(url) (by value) using the default caps key.