dav_capability_profile

Macro dav_capability_profile 

Source
macro_rules! dav_capability_profile {
    ($base:ty $(,)?) => { ... };
    ($base:ty; $extension:ty $(,)?) => { ... };
    ($base:ty; $extension:ty, $($remaining:ty),+ $(,)?) => { ... };
}
Expand description

Builds a readable aggregate profile without a runtime registry.

Selecting a package without its implementation marker is a compile-time error:

use aster_forge_webdav::{
    DavBackendError, DavCapabilityContext, DavCapabilityDeclaration, DavCapabilityProvider,
    DavCapabilityTarget, DavClass1Profile, DavClass1Support, DavQuotaExtension,
    dav_capability_profile,
};
struct MissingQuotaImplementation;
impl DavClass1Support for MissingQuotaImplementation {}
impl DavCapabilityProvider for MissingQuotaImplementation {
    type Profile = dav_capability_profile!(DavClass1Profile; DavQuotaExtension);
    async fn capabilities(
        &self,
        _target: &DavCapabilityTarget,
        _context: &DavCapabilityContext,
    ) -> Result<DavCapabilityDeclaration, DavBackendError> {
        loop {}
    }
}

An RFC package also cannot be attached to a non-Class-1 base profile:

use aster_forge_webdav::{
    DavBackendError, DavCapabilityContext, DavCapabilityDeclaration, DavCapabilityProvider,
    DavCapabilityTarget, DavClass1Support, DavNonDavProfile, DavQuotaExtension,
    DavQuotaSupport, dav_capability_profile,
};
struct InvalidBase;
impl DavClass1Support for InvalidBase {}
impl DavQuotaSupport for InvalidBase {}
impl DavCapabilityProvider for InvalidBase {
    type Profile = dav_capability_profile!(DavNonDavProfile; DavQuotaExtension);
    async fn capabilities(
        &self,
        _target: &DavCapabilityTarget,
        _context: &DavCapabilityContext,
    ) -> Result<DavCapabilityDeclaration, DavBackendError> {
        loop {}
    }
}