58 lines
1.8 KiB
Rust
58 lines
1.8 KiB
Rust
//! `@public` marker — the explicit opt-out of authentication.
|
|
//!
|
|
//! The security-by-default model: `@authenticate` is applied to EVERY function
|
|
//! by default. `@public` is the rare annotation that says "this endpoint
|
|
//! intentionally has no auth".
|
|
//!
|
|
//! `PublicMarker` is a zero-cost marker. When the compiler sees `@public` on a
|
|
//! function, it strips `AuthenticateAspect` from the chain for that function.
|
|
//! The chain-builder checks `is_public` before prepending default auth.
|
|
|
|
/// Zero-cost marker indicating that a function is intentionally public.
|
|
///
|
|
/// When `@public` is present, the default `AuthenticateAspect` is NOT added
|
|
/// to the function's aspect chain.
|
|
///
|
|
/// Usage in the el-ui compiler:
|
|
/// ```text
|
|
/// @public
|
|
/// fn health_check() -> Status { ... }
|
|
/// ```
|
|
///
|
|
/// In the AOP chain builder:
|
|
/// ```rust
|
|
/// use el_aop::{AspectChain, PublicMarker, AuthenticateAspect};
|
|
/// use std::sync::Arc;
|
|
///
|
|
/// fn build_chain(is_public: bool) -> AspectChain {
|
|
/// if is_public || PublicMarker::is_bypassing() {
|
|
/// AspectChain::new()
|
|
/// } else {
|
|
/// AspectChain::new().with_default_auth()
|
|
/// }
|
|
/// }
|
|
/// ```
|
|
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
|
|
pub struct PublicMarker;
|
|
|
|
impl PublicMarker {
|
|
/// Returns `true` — always. Exists for use in match arms / conditional logic.
|
|
///
|
|
/// The presence of a `PublicMarker` in the decorator list is the signal;
|
|
/// this method is a convenience for procedural logic over decorator lists.
|
|
pub const fn is_bypassing() -> bool {
|
|
true
|
|
}
|
|
|
|
/// The decorator name this marker corresponds to.
|
|
pub const fn decorator_name() -> &'static str {
|
|
"public"
|
|
}
|
|
}
|
|
|
|
impl std::fmt::Display for PublicMarker {
|
|
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
|
write!(f, "@public")
|
|
}
|
|
}
|