pub struct CachePlugin { /* private fields */ }Expand description
The plugin. Carries no models, no routes — just a Cache handle it
installs as the ambient cache at boot, so cache_page and any handler
that calls ambient() find it without explicit dependency injection.
Idiomatic registration (the carried cache is wired in on_ready):
App::builder()
.plugin(CachePlugin::new(Cache::memory()))
// or: CachePlugin::new(Cache::redis("redis://localhost:6379/0").await?)
.build()?;CachePlugin::init(cache) remains for manual/test wiring outside the
plugin lifecycle.
§Opt-in compression and Cache-Control headers
CachePlugin::new(Cache::memory())
.with_compression() // enables gzip/br/zstd negotiation
.cache_control("public, max-age=3600")
.vary("Accept-Encoding")Implementations§
Source§impl CachePlugin
impl CachePlugin
Sourcepub fn new(cache: Cache) -> Self
pub fn new(cache: Cache) -> Self
Build the plugin carrying cache. The idiomatic
App::builder().plugin(CachePlugin::new(Cache::memory())) then
installs it as the ambient handle at boot (BROKEN-9) — no separate
init call, so cache_page actually caches.
Sourcepub fn init(cache: Cache)
pub fn init(cache: Cache)
Store cache as the ambient handle directly, outside the plugin
lifecycle. Prefer CachePlugin::new in app code; this stays for
manual / test wiring. Calling it twice panics (same contract as
settings::init).
Sourcepub fn with_compression(self) -> Self
pub fn with_compression(self) -> Self
Enable response compression. Applies tower_http::compression::CompressionLayer
to the router; negotiates gzip / brotli / deflate / zstd via Accept-Encoding.
Default: off.
Sourcepub fn cache_control(self, value: impl Into<String>) -> Self
pub fn cache_control(self, value: impl Into<String>) -> Self
Emit a Cache-Control header on every response. value is the raw
directive string (e.g. "public, max-age=3600", "no-store").
Default: not set.
Sourcepub fn vary(self, value: impl Into<String>) -> Self
pub fn vary(self, value: impl Into<String>) -> Self
Emit a Vary header on every response. Typically paired with
with_compression: "Accept-Encoding" tells
caches that different encodings are distinct variants of the same URL.
Default: not set.
Trait Implementations§
Source§impl Default for CachePlugin
impl Default for CachePlugin
Source§fn default() -> CachePlugin
fn default() -> CachePlugin
Source§impl Plugin for CachePlugin
impl Plugin for CachePlugin
Source§fn name(&self) -> &'static str
fn name(&self) -> &'static str
migrations/. Plugin names live in the same namespace as
migrate::APP_PLUGIN_NAME ("app"), so user crates must not
pick the name "app".Source§fn wrap_router(&self, router: Router) -> Router
fn wrap_router(&self, router: Router) -> Router
Source§fn on_ready(&self, _ctx: &AppContext) -> Result<(), PluginError>
fn on_ready(&self, _ctx: &AppContext) -> Result<(), PluginError>
ctx.runtime() when the runtime handle lands.Source§fn dependencies(&self) -> &'static [&'static str]
fn dependencies(&self) -> &'static [&'static str]
App::builder() topological sort uses this; cycles surface as
BuildError::PluginCycle. The default is no dependencies.Source§fn models(&self) -> Vec<ModelMeta>
fn models(&self) -> Vec<ModelMeta>
makemigrations. Read moreSource§fn routes(&self) -> Router
fn routes(&self) -> Router
AppBuilder::routes(). Plugins
choose their own path prefixes (spec 02 §“What a plugin can
contribute”: routes are flat, not auto-prefixed). Read moreSource§fn routes_builder(&self) -> Option<Routes>
fn routes_builder(&self) -> Option<Routes>
routes + route_paths
(gaps4 #31): mount routes through the recording Routes
builder and the framework takes BOTH the axum router and the
declared RouteSpecs from that ONE source, so the route
registry can never fall out of sync with what’s mounted. Read moreSource§fn route_paths(&self) -> Vec<RouteSpec>
fn route_paths(&self) -> Vec<RouteSpec>
routes used for surfacing route lists outside the request
flow (currently: the dev-mode default 404 page). axum doesn’t
expose its internal route table, so plugins report what they
declare here; the framework treats this as informational only
— not a source of truth for routing. Read moreSource§fn openapi_paths(&self) -> Vec<(String, Value)>
fn openapi_paths(&self) -> Vec<(String, Value)>
Vec<(path, value)> where path is the URL template
(/api/auth/login, /api/foo/{id}) and value is the
matching OpenAPI 3.0 Path Item Object serialised as
a serde_json::Value. Read moreSource§fn system_checks(&self) -> Vec<SystemCheck>
fn system_checks(&self) -> Vec<SystemCheck>
App::build() alongside the framework’s built-in checks.
Severity::Error blocks boot; Severity::Warning logs and
continues.Source§fn provides_storage(&self) -> bool
fn provides_storage(&self) -> bool
true if this plugin registers a Storage
backend (e.g. StoragePlugin, which calls
crate::storage::set_storage in Plugin::on_ready). Read moreSource§fn database(&self) -> Option<&'static str>
fn database(&self) -> Option<&'static str>
None to use the
"default" pool (the same one umbral::db::pool() returns). Read moreSource§fn templates_dirs(&self) -> Vec<PathBuf>
fn templates_dirs(&self) -> Vec<PathBuf>
Source§fn template_registrars(
&self,
) -> Vec<Box<dyn Fn(&mut Environment<'static>) + Send + Sync>>
fn template_registrars( &self, ) -> Vec<Box<dyn Fn(&mut Environment<'static>) + Send + Sync>>
Source§fn middleware(&self) -> Vec<Arc<dyn Middleware>>
fn middleware(&self) -> Vec<Arc<dyn Middleware>>
Source§fn static_files(&self) -> Vec<StaticFile>
fn static_files(&self) -> Vec<StaticFile>
Source§fn static_dirs(&self) -> Vec<StaticDir>
fn static_dirs(&self) -> Vec<StaticDir>
Source§fn static_root_dirs(&self) -> Vec<PathBuf>
fn static_root_dirs(&self) -> Vec<PathBuf>
static_url — with
no namespace segment. Read moreSource§fn commands(&self) -> Vec<Box<dyn PluginCommand>>
fn commands(&self) -> Vec<Box<dyn PluginCommand>>
Source§fn api_endpoints(&self) -> Vec<ApiEndpoint>
fn api_endpoints(&self) -> Vec<ApiEndpoint>
Auto Trait Implementations§
impl !RefUnwindSafe for CachePlugin
impl !UnwindSafe for CachePlugin
impl Freeze for CachePlugin
impl Send for CachePlugin
impl Sync for CachePlugin
impl Unpin for CachePlugin
impl UnsafeUnpin for CachePlugin
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
impl<A, B, T> HttpServerConnExec<A, B> for Twhere
B: Body,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Paint for Twhere
T: ?Sized,
impl<T> Paint for Twhere
T: ?Sized,
Source§fn fg(&self, value: Color) -> Painted<&T>
fn fg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the foreground set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like red() and
green(), which have the same functionality but are
pithier.
§Example
Set foreground color to white using fg():
use yansi::{Paint, Color};
painted.fg(Color::White);Set foreground color to white using white().
use yansi::Paint;
painted.white();Source§fn bright_black(&self) -> Painted<&T>
fn bright_black(&self) -> Painted<&T>
Source§fn bright_red(&self) -> Painted<&T>
fn bright_red(&self) -> Painted<&T>
Source§fn bright_green(&self) -> Painted<&T>
fn bright_green(&self) -> Painted<&T>
Source§fn bright_yellow(&self) -> Painted<&T>
fn bright_yellow(&self) -> Painted<&T>
Source§fn bright_blue(&self) -> Painted<&T>
fn bright_blue(&self) -> Painted<&T>
Source§fn bright_magenta(&self) -> Painted<&T>
fn bright_magenta(&self) -> Painted<&T>
Source§fn bright_cyan(&self) -> Painted<&T>
fn bright_cyan(&self) -> Painted<&T>
Source§fn bright_white(&self) -> Painted<&T>
fn bright_white(&self) -> Painted<&T>
Source§fn bg(&self, value: Color) -> Painted<&T>
fn bg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the background set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like on_red() and
on_green(), which have the same functionality but
are pithier.
§Example
Set background color to red using fg():
use yansi::{Paint, Color};
painted.bg(Color::Red);Set background color to red using on_red().
use yansi::Paint;
painted.on_red();Source§fn on_primary(&self) -> Painted<&T>
fn on_primary(&self) -> Painted<&T>
Source§fn on_magenta(&self) -> Painted<&T>
fn on_magenta(&self) -> Painted<&T>
Source§fn on_bright_black(&self) -> Painted<&T>
fn on_bright_black(&self) -> Painted<&T>
Source§fn on_bright_red(&self) -> Painted<&T>
fn on_bright_red(&self) -> Painted<&T>
Source§fn on_bright_green(&self) -> Painted<&T>
fn on_bright_green(&self) -> Painted<&T>
Source§fn on_bright_yellow(&self) -> Painted<&T>
fn on_bright_yellow(&self) -> Painted<&T>
Source§fn on_bright_blue(&self) -> Painted<&T>
fn on_bright_blue(&self) -> Painted<&T>
Source§fn on_bright_magenta(&self) -> Painted<&T>
fn on_bright_magenta(&self) -> Painted<&T>
Source§fn on_bright_cyan(&self) -> Painted<&T>
fn on_bright_cyan(&self) -> Painted<&T>
Source§fn on_bright_white(&self) -> Painted<&T>
fn on_bright_white(&self) -> Painted<&T>
Source§fn attr(&self, value: Attribute) -> Painted<&T>
fn attr(&self, value: Attribute) -> Painted<&T>
Enables the styling Attribute value.
This method should be used rarely. Instead, prefer to use
attribute-specific builder methods like bold() and
underline(), which have the same functionality
but are pithier.
§Example
Make text bold using attr():
use yansi::{Paint, Attribute};
painted.attr(Attribute::Bold);Make text bold using using bold().
use yansi::Paint;
painted.bold();Source§fn rapid_blink(&self) -> Painted<&T>
fn rapid_blink(&self) -> Painted<&T>
Source§fn quirk(&self, value: Quirk) -> Painted<&T>
fn quirk(&self, value: Quirk) -> Painted<&T>
Enables the yansi Quirk value.
This method should be used rarely. Instead, prefer to use quirk-specific
builder methods like mask() and
wrap(), which have the same functionality but are
pithier.
§Example
Enable wrapping using .quirk():
use yansi::{Paint, Quirk};
painted.quirk(Quirk::Wrap);Enable wrapping using wrap().
use yansi::Paint;
painted.wrap();Source§fn clear(&self) -> Painted<&T>
👎Deprecated since 1.0.1: renamed to resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.
fn clear(&self) -> Painted<&T>
renamed to resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.
Source§fn whenever(&self, value: Condition) -> Painted<&T>
fn whenever(&self, value: Condition) -> Painted<&T>
Conditionally enable styling based on whether the Condition value
applies. Replaces any previous condition.
See the crate level docs for more details.
§Example
Enable styling painted only when both stdout and stderr are TTYs:
use yansi::{Paint, Condition};
painted.red().on_yellow().whenever(Condition::STDOUTERR_ARE_TTY);