Add Resource to axum-extra (#538)

This commit is contained in:
David Pedersen
2021-11-17 22:31:43 +00:00
committed by GitHub
parent b43b9ed69d
commit f9a437d081
4 changed files with 317 additions and 0 deletions
+35
View File
@@ -0,0 +1,35 @@
//! 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> {}
}