mirror of
https://github.com/tokio-rs/axum.git
synced 2026-09-02 00:00:22 +02:00
36 lines
821 B
Rust
36 lines
821 B
Rust
//! Additional types for defining routes.
|
|||
|
|
|
||
|
|
use axum::Router;
|
||
|
|
|
||
|
|
mod resource;
|
||
|
|
|
||
|
|
pub use self::resource::Resource;
|
||
|
|
|
||
|
|
/// Extension trait that adds additional methods to [`Router`].
|
||
|
|
pub trait RouterExt<B>: sealed::Sealed {
|
||
|
|
/// Add a [`Resource`] to the router.
|
||
|
|
///
|
||
|
|
/// See [`Resource`] for more details.
|
||
|
|
fn resource<F>(self, name: &str, f: F) -> Self
|
||
|
|
where
|
||
|
|
F: FnOnce(resource::Resource<B>) -> resource::Resource<B>;
|
||
|
|
}
|
||
|
|
|
||
|
|
impl<B> RouterExt<B> for Router<B> {
|
||
|
|
fn resource<F>(self, name: &str, f: F) -> Self
|
||
|
|
where
|
||
|
|
F: FnOnce(resource::Resource<B>) -> resource::Resource<B>,
|
||
|
|
{
|
||
|
|
f(resource::Resource {
|
||
|
|
name: name.to_owned(),
|
||
|
|
router: self,
|
||
|
|
})
|
||
|
|
.router
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
mod sealed {
|
||
|
|
pub trait Sealed {}
|
||
|
|
impl<B> Sealed for axum::Router<B> {}
|
||
|
|
}
|