Skip to main content

Has

Trait Has 

Source
pub trait Has<P: Permission> {
    // Required method
    fn cap_ref(&self) -> Cap<P>;
}
Expand description

Proof that a capability token includes permission P.

This trait is open for implementation — custom context structs can implement Has<P> to delegate capability access. Security is maintained because Cap::new() is pub(crate): no external code can forge a Cap<P> in safe Rust.

Use CapRoot::grant() to obtain capability tokens, or implement Has<P> on your own structs using the #[capsec::context] macro.

§Example

fn needs_fs(cap: &impl Has<FsRead>) {
    let _ = cap.cap_ref(); // proof of permission
}

let root = test_root();
let cap = root.grant::<FsRead>();
needs_fs(&cap);

Required Methods§

Source

fn cap_ref(&self) -> Cap<P>

Returns a new Cap<P> proving the permission is available.

Implementors§

Source§

impl Has<Ambient> for Cap<(Ambient, Ambient)>

Source§

impl Has<Ambient> for Cap<(Ambient, EnvRead)>

Source§

impl Has<Ambient> for Cap<(Ambient, EnvWrite)>

Source§

impl Has<Ambient> for Cap<(Ambient, FsAll)>

Source§

impl Has<Ambient> for Cap<(Ambient, FsRead)>

Source§

impl Has<Ambient> for Cap<(Ambient, FsWrite)>

Source§

impl Has<Ambient> for Cap<(Ambient, NetAll)>

Source§

impl Has<Ambient> for Cap<(Ambient, NetBind)>

Source§

impl Has<Ambient> for Cap<(Ambient, NetConnect)>

Source§

impl Has<Ambient> for Cap<(Ambient, Spawn)>

Source§

impl Has<Ambient> for Cap<(EnvRead, Ambient)>

Source§

impl Has<Ambient> for Cap<(EnvWrite, Ambient)>

Source§

impl Has<Ambient> for Cap<(FsAll, Ambient)>

Source§

impl Has<Ambient> for Cap<(FsRead, Ambient)>

Source§

impl Has<Ambient> for Cap<(FsWrite, Ambient)>

Source§

impl Has<Ambient> for Cap<(NetAll, Ambient)>

Source§

impl Has<Ambient> for Cap<(NetBind, Ambient)>

Source§

impl Has<Ambient> for Cap<(NetConnect, Ambient)>

Source§

impl Has<Ambient> for Cap<(Spawn, Ambient)>

Source§

impl Has<EnvRead> for Cap<(Ambient, EnvRead)>

Source§

impl Has<EnvRead> for Cap<(EnvRead, Ambient)>

Source§

impl Has<EnvRead> for Cap<(EnvRead, EnvRead)>

Source§

impl Has<EnvRead> for Cap<(EnvRead, EnvWrite)>

Source§

impl Has<EnvRead> for Cap<(EnvRead, FsAll)>

Source§

impl Has<EnvRead> for Cap<(EnvRead, FsRead)>

Source§

impl Has<EnvRead> for Cap<(EnvRead, FsWrite)>

Source§

impl Has<EnvRead> for Cap<(EnvRead, NetAll)>

Source§

impl Has<EnvRead> for Cap<(EnvRead, NetBind)>

Source§

impl Has<EnvRead> for Cap<(EnvRead, NetConnect)>

Source§

impl Has<EnvRead> for Cap<(EnvRead, Spawn)>

Source§

impl Has<EnvRead> for Cap<(EnvWrite, EnvRead)>

Source§

impl Has<EnvRead> for Cap<(FsAll, EnvRead)>

Source§

impl Has<EnvRead> for Cap<(FsRead, EnvRead)>

Source§

impl Has<EnvRead> for Cap<(FsWrite, EnvRead)>

Source§

impl Has<EnvRead> for Cap<(NetAll, EnvRead)>

Source§

impl Has<EnvRead> for Cap<(NetBind, EnvRead)>

Source§

impl Has<EnvRead> for Cap<(NetConnect, EnvRead)>

Source§

impl Has<EnvRead> for Cap<(Spawn, EnvRead)>

Source§

impl Has<EnvRead> for Cap<Ambient>

Source§

impl Has<EnvWrite> for Cap<(Ambient, EnvWrite)>

Source§

impl Has<EnvWrite> for Cap<(EnvRead, EnvWrite)>

Source§

impl Has<EnvWrite> for Cap<(EnvWrite, Ambient)>

Source§

impl Has<EnvWrite> for Cap<(EnvWrite, EnvRead)>

Source§

impl Has<EnvWrite> for Cap<(EnvWrite, EnvWrite)>

Source§

impl Has<EnvWrite> for Cap<(EnvWrite, FsAll)>

Source§

impl Has<EnvWrite> for Cap<(EnvWrite, FsRead)>

Source§

impl Has<EnvWrite> for Cap<(EnvWrite, FsWrite)>

Source§

impl Has<EnvWrite> for Cap<(EnvWrite, NetAll)>

Source§

impl Has<EnvWrite> for Cap<(EnvWrite, NetBind)>

Source§

impl Has<EnvWrite> for Cap<(EnvWrite, NetConnect)>

Source§

impl Has<EnvWrite> for Cap<(EnvWrite, Spawn)>

Source§

impl Has<EnvWrite> for Cap<(FsAll, EnvWrite)>

Source§

impl Has<EnvWrite> for Cap<(FsRead, EnvWrite)>

Source§

impl Has<EnvWrite> for Cap<(FsWrite, EnvWrite)>

Source§

impl Has<EnvWrite> for Cap<(NetAll, EnvWrite)>

Source§

impl Has<EnvWrite> for Cap<(NetBind, EnvWrite)>

Source§

impl Has<EnvWrite> for Cap<(NetConnect, EnvWrite)>

Source§

impl Has<EnvWrite> for Cap<(Spawn, EnvWrite)>

Source§

impl Has<EnvWrite> for Cap<Ambient>

Source§

impl Has<FsAll> for Cap<(Ambient, FsAll)>

Source§

impl Has<FsAll> for Cap<(EnvRead, FsAll)>

Source§

impl Has<FsAll> for Cap<(EnvWrite, FsAll)>

Source§

impl Has<FsAll> for Cap<(FsAll, Ambient)>

Source§

impl Has<FsAll> for Cap<(FsAll, EnvRead)>

Source§

impl Has<FsAll> for Cap<(FsAll, EnvWrite)>

Source§

impl Has<FsAll> for Cap<(FsAll, FsAll)>

Source§

impl Has<FsAll> for Cap<(FsAll, FsRead)>

Source§

impl Has<FsAll> for Cap<(FsAll, FsWrite)>

Source§

impl Has<FsAll> for Cap<(FsAll, NetAll)>

Source§

impl Has<FsAll> for Cap<(FsAll, NetBind)>

Source§

impl Has<FsAll> for Cap<(FsAll, NetConnect)>

Source§

impl Has<FsAll> for Cap<(FsAll, Spawn)>

Source§

impl Has<FsAll> for Cap<(FsRead, FsAll)>

Source§

impl Has<FsAll> for Cap<(FsWrite, FsAll)>

Source§

impl Has<FsAll> for Cap<(NetAll, FsAll)>

Source§

impl Has<FsAll> for Cap<(NetBind, FsAll)>

Source§

impl Has<FsAll> for Cap<(NetConnect, FsAll)>

Source§

impl Has<FsAll> for Cap<(Spawn, FsAll)>

Source§

impl Has<FsAll> for Cap<Ambient>

Source§

impl Has<FsRead> for Cap<(Ambient, FsRead)>

Source§

impl Has<FsRead> for Cap<(EnvRead, FsRead)>

Source§

impl Has<FsRead> for Cap<(EnvWrite, FsRead)>

Source§

impl Has<FsRead> for Cap<(FsAll, FsRead)>

Source§

impl Has<FsRead> for Cap<(FsRead, Ambient)>

Source§

impl Has<FsRead> for Cap<(FsRead, EnvRead)>

Source§

impl Has<FsRead> for Cap<(FsRead, EnvWrite)>

Source§

impl Has<FsRead> for Cap<(FsRead, FsAll)>

Source§

impl Has<FsRead> for Cap<(FsRead, FsRead)>

Source§

impl Has<FsRead> for Cap<(FsRead, FsWrite)>

Source§

impl Has<FsRead> for Cap<(FsRead, NetAll)>

Source§

impl Has<FsRead> for Cap<(FsRead, NetBind)>

Source§

impl Has<FsRead> for Cap<(FsRead, NetConnect)>

Source§

impl Has<FsRead> for Cap<(FsRead, Spawn)>

Source§

impl Has<FsRead> for Cap<(FsWrite, FsRead)>

Source§

impl Has<FsRead> for Cap<(NetAll, FsRead)>

Source§

impl Has<FsRead> for Cap<(NetBind, FsRead)>

Source§

impl Has<FsRead> for Cap<(NetConnect, FsRead)>

Source§

impl Has<FsRead> for Cap<(Spawn, FsRead)>

Source§

impl Has<FsRead> for Cap<Ambient>

Source§

impl Has<FsRead> for Cap<FsAll>

Source§

impl Has<FsWrite> for Cap<(Ambient, FsWrite)>

Source§

impl Has<FsWrite> for Cap<(EnvRead, FsWrite)>

Source§

impl Has<FsWrite> for Cap<(EnvWrite, FsWrite)>

Source§

impl Has<FsWrite> for Cap<(FsAll, FsWrite)>

Source§

impl Has<FsWrite> for Cap<(FsRead, FsWrite)>

Source§

impl Has<FsWrite> for Cap<(FsWrite, Ambient)>

Source§

impl Has<FsWrite> for Cap<(FsWrite, EnvRead)>

Source§

impl Has<FsWrite> for Cap<(FsWrite, EnvWrite)>

Source§

impl Has<FsWrite> for Cap<(FsWrite, FsAll)>

Source§

impl Has<FsWrite> for Cap<(FsWrite, FsRead)>

Source§

impl Has<FsWrite> for Cap<(FsWrite, FsWrite)>

Source§

impl Has<FsWrite> for Cap<(FsWrite, NetAll)>

Source§

impl Has<FsWrite> for Cap<(FsWrite, NetBind)>

Source§

impl Has<FsWrite> for Cap<(FsWrite, NetConnect)>

Source§

impl Has<FsWrite> for Cap<(FsWrite, Spawn)>

Source§

impl Has<FsWrite> for Cap<(NetAll, FsWrite)>

Source§

impl Has<FsWrite> for Cap<(NetBind, FsWrite)>

Source§

impl Has<FsWrite> for Cap<(NetConnect, FsWrite)>

Source§

impl Has<FsWrite> for Cap<(Spawn, FsWrite)>

Source§

impl Has<FsWrite> for Cap<Ambient>

Source§

impl Has<FsWrite> for Cap<FsAll>

Source§

impl Has<NetAll> for Cap<(Ambient, NetAll)>

Source§

impl Has<NetAll> for Cap<(EnvRead, NetAll)>

Source§

impl Has<NetAll> for Cap<(EnvWrite, NetAll)>

Source§

impl Has<NetAll> for Cap<(FsAll, NetAll)>

Source§

impl Has<NetAll> for Cap<(FsRead, NetAll)>

Source§

impl Has<NetAll> for Cap<(FsWrite, NetAll)>

Source§

impl Has<NetAll> for Cap<(NetAll, Ambient)>

Source§

impl Has<NetAll> for Cap<(NetAll, EnvRead)>

Source§

impl Has<NetAll> for Cap<(NetAll, EnvWrite)>

Source§

impl Has<NetAll> for Cap<(NetAll, FsAll)>

Source§

impl Has<NetAll> for Cap<(NetAll, FsRead)>

Source§

impl Has<NetAll> for Cap<(NetAll, FsWrite)>

Source§

impl Has<NetAll> for Cap<(NetAll, NetAll)>

Source§

impl Has<NetAll> for Cap<(NetAll, NetBind)>

Source§

impl Has<NetAll> for Cap<(NetAll, NetConnect)>

Source§

impl Has<NetAll> for Cap<(NetAll, Spawn)>

Source§

impl Has<NetAll> for Cap<(NetBind, NetAll)>

Source§

impl Has<NetAll> for Cap<(NetConnect, NetAll)>

Source§

impl Has<NetAll> for Cap<(Spawn, NetAll)>

Source§

impl Has<NetAll> for Cap<Ambient>

Source§

impl Has<NetBind> for Cap<(Ambient, NetBind)>

Source§

impl Has<NetBind> for Cap<(EnvRead, NetBind)>

Source§

impl Has<NetBind> for Cap<(EnvWrite, NetBind)>

Source§

impl Has<NetBind> for Cap<(FsAll, NetBind)>

Source§

impl Has<NetBind> for Cap<(FsRead, NetBind)>

Source§

impl Has<NetBind> for Cap<(FsWrite, NetBind)>

Source§

impl Has<NetBind> for Cap<(NetAll, NetBind)>

Source§

impl Has<NetBind> for Cap<(NetBind, Ambient)>

Source§

impl Has<NetBind> for Cap<(NetBind, EnvRead)>

Source§

impl Has<NetBind> for Cap<(NetBind, EnvWrite)>

Source§

impl Has<NetBind> for Cap<(NetBind, FsAll)>

Source§

impl Has<NetBind> for Cap<(NetBind, FsRead)>

Source§

impl Has<NetBind> for Cap<(NetBind, FsWrite)>

Source§

impl Has<NetBind> for Cap<(NetBind, NetAll)>

Source§

impl Has<NetBind> for Cap<(NetBind, NetBind)>

Source§

impl Has<NetBind> for Cap<(NetBind, NetConnect)>

Source§

impl Has<NetBind> for Cap<(NetBind, Spawn)>

Source§

impl Has<NetBind> for Cap<(NetConnect, NetBind)>

Source§

impl Has<NetBind> for Cap<(Spawn, NetBind)>

Source§

impl Has<NetBind> for Cap<Ambient>

Source§

impl Has<NetBind> for Cap<NetAll>

Source§

impl Has<NetConnect> for Cap<(Ambient, NetConnect)>

Source§

impl Has<NetConnect> for Cap<(EnvRead, NetConnect)>

Source§

impl Has<NetConnect> for Cap<(EnvWrite, NetConnect)>

Source§

impl Has<NetConnect> for Cap<(FsAll, NetConnect)>

Source§

impl Has<NetConnect> for Cap<(FsRead, NetConnect)>

Source§

impl Has<NetConnect> for Cap<(FsWrite, NetConnect)>

Source§

impl Has<NetConnect> for Cap<(NetAll, NetConnect)>

Source§

impl Has<NetConnect> for Cap<(NetBind, NetConnect)>

Source§

impl Has<NetConnect> for Cap<(NetConnect, Ambient)>

Source§

impl Has<NetConnect> for Cap<(NetConnect, EnvRead)>

Source§

impl Has<NetConnect> for Cap<(NetConnect, EnvWrite)>

Source§

impl Has<NetConnect> for Cap<(NetConnect, FsAll)>

Source§

impl Has<NetConnect> for Cap<(NetConnect, FsRead)>

Source§

impl Has<NetConnect> for Cap<(NetConnect, FsWrite)>

Source§

impl Has<NetConnect> for Cap<(NetConnect, NetAll)>

Source§

impl Has<NetConnect> for Cap<(NetConnect, NetBind)>

Source§

impl Has<NetConnect> for Cap<(NetConnect, NetConnect)>

Source§

impl Has<NetConnect> for Cap<(NetConnect, Spawn)>

Source§

impl Has<NetConnect> for Cap<(Spawn, NetConnect)>

Source§

impl Has<NetConnect> for Cap<Ambient>

Source§

impl Has<NetConnect> for Cap<NetAll>

Source§

impl Has<Spawn> for Cap<(Ambient, Spawn)>

Source§

impl Has<Spawn> for Cap<(EnvRead, Spawn)>

Source§

impl Has<Spawn> for Cap<(EnvWrite, Spawn)>

Source§

impl Has<Spawn> for Cap<(FsAll, Spawn)>

Source§

impl Has<Spawn> for Cap<(FsRead, Spawn)>

Source§

impl Has<Spawn> for Cap<(FsWrite, Spawn)>

Source§

impl Has<Spawn> for Cap<(NetAll, Spawn)>

Source§

impl Has<Spawn> for Cap<(NetBind, Spawn)>

Source§

impl Has<Spawn> for Cap<(NetConnect, Spawn)>

Source§

impl Has<Spawn> for Cap<(Spawn, Ambient)>

Source§

impl Has<Spawn> for Cap<(Spawn, EnvRead)>

Source§

impl Has<Spawn> for Cap<(Spawn, EnvWrite)>

Source§

impl Has<Spawn> for Cap<(Spawn, FsAll)>

Source§

impl Has<Spawn> for Cap<(Spawn, FsRead)>

Source§

impl Has<Spawn> for Cap<(Spawn, FsWrite)>

Source§

impl Has<Spawn> for Cap<(Spawn, NetAll)>

Source§

impl Has<Spawn> for Cap<(Spawn, NetBind)>

Source§

impl Has<Spawn> for Cap<(Spawn, NetConnect)>

Source§

impl Has<Spawn> for Cap<(Spawn, Spawn)>

Source§

impl Has<Spawn> for Cap<Ambient>

Source§

impl<P: Permission> Has<P> for Cap<P>

Source§

impl<P: Permission> Has<P> for SendCap<P>