//! `@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") } }