3 Commits
1.1.1 ... 1.2.0

5 changed files with 22 additions and 13 deletions

View File

@ -42,8 +42,13 @@ impl AppBuilder {
Self::default() Self::default()
} }
pub fn routes(mut self, routes: &[Router]) -> Self { pub fn route(mut self, route: Router) -> Self {
self.router = routes.iter().cloned().fold(self.router, Router::merge); self.router = self.router.merge(route);
self
}
pub fn routes(mut self, routes: impl IntoIterator<Item = Router>) -> Self {
self.router = routes.into_iter().fold(self.router, Router::merge);
self self
} }
@ -147,7 +152,7 @@ mod tests {
let handler = tokio::spawn(async { let handler = tokio::spawn(async {
AppBuilder::new() AppBuilder::new()
.socket((Ipv4Addr::LOCALHOST, 8080)) .socket((Ipv4Addr::LOCALHOST, 8080))
.routes(&[Router::new()]) .routes([Router::new()])
.fallback(|| async { "Fallback" }) .fallback(|| async { "Fallback" })
.cors(CorsLayer::new()) .cors(CorsLayer::new())
.normalize_path(true) .normalize_path(true)

View File

@ -21,7 +21,7 @@
#[cfg(feature = "axum")] #[cfg(feature = "axum")]
macro_rules! router { macro_rules! router {
($body:expr) => { ($body:expr) => {
pub(crate) fn router() -> axum::Router<()> { pub(crate) fn router() -> axum::Router {
$body $body
} }
}; };
@ -104,6 +104,6 @@ mod tests {
#[test] #[test]
fn test_join_routes() { fn test_join_routes() {
let _router: Router<()> = join_routes![Router::new(), Router::new()]; let _router: Router = join_routes![Router::new(), Router::new()];
} }
} }

View File

@ -4,6 +4,7 @@ pub mod axum;
pub mod io; pub mod io;
pub mod nom; pub mod nom;
pub mod serde; pub mod serde;
mod traits;
pub mod vector; pub mod vector;
#[cfg(feature = "derive")] #[cfg(feature = "derive")]

View File

@ -1,11 +1,8 @@
#[cfg(feature = "nom")] #[cfg(feature = "nom")]
use nom::{error::Error, IResult}; use {
crate::traits::IntoResult,
#[cfg(feature = "nom")] nom::{error::Error, IResult},
pub trait IntoResult<T> { };
type Error;
fn into_result(self) -> Result<T, Self::Error>;
}
#[cfg(feature = "nom")] #[cfg(feature = "nom")]
impl<T, R> IntoResult<T> for IResult<R, T> { impl<T, R> IntoResult<T> for IResult<R, T> {
@ -17,9 +14,10 @@ impl<T, R> IntoResult<T> for IResult<R, T> {
#[cfg(all(test, feature = "nom"))] #[cfg(all(test, feature = "nom"))]
mod tests { mod tests {
use super::*;
use nom::character::complete::char as c; use nom::character::complete::char as c;
use super::*;
fn parse_char(input: &str) -> IResult<&str, char> { fn parse_char(input: &str) -> IResult<&str, char> {
c('A')(input) c('A')(input)
} }

5
src/traits.rs Normal file
View File

@ -0,0 +1,5 @@
/// Converts a type T into a Result<T, E>
pub trait IntoResult<T> {
type Error;
fn into_result(self) -> Result<T, Self::Error>;
}