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 {}
}
}