Skip to main content

requires

Attribute Macro requires 

Source
#[requires]
Expand description

Declares the capability requirements of a function.

When all parameters use impl Has<P> bounds, the compiler already enforces the trait bounds and this macro emits only a #[doc] attribute.

When concrete parameter types are used (e.g., context structs), use on = param to identify the capability parameter. The macro emits a compile-time assertion that the parameter type implements Has<P> for each declared permission.

§Usage

// With impl bounds — no `on` needed
#[capsec::requires(fs::read, net::connect)]
fn sync_data(cap: &(impl Has<FsRead> + Has<NetConnect>)) -> Result<()> {
    // ...
}

// With concrete context type — use `on = param`
#[capsec::requires(fs::read, net::connect, on = ctx)]
fn sync_data(config: &Config, ctx: &AppCtx) -> Result<()> {
    // ...
}

§Supported permission paths

Both shorthand and explicit forms are accepted:

ShorthandExplicitPermission type
fs::readFsReadcapsec_core::permission::FsRead
fs::writeFsWritecapsec_core::permission::FsWrite
net::connectNetConnectcapsec_core::permission::NetConnect
net::bindNetBindcapsec_core::permission::NetBind
env::readEnvReadcapsec_core::permission::EnvRead
env::writeEnvWritecapsec_core::permission::EnvWrite
spawnSpawncapsec_core::permission::Spawn
allAmbientcapsec_core::permission::Ambient