use crate::app_router::HttpMethodExt;
use axum::Router;
use axum::routing;
use beet_core::prelude::RouteInfo;
pub trait IntoBeetRoute<M> {
type State;
fn add_beet_route(
self,
router: Router<Self::State>,
route_info: RouteInfo,
) -> Router<Self::State>;
}
pub struct AxumHandlerIntoBeetRouteMarker;
impl<H, T, S> IntoBeetRoute<(AxumHandlerIntoBeetRouteMarker, T, S)> for H
where
H: axum::handler::Handler<T, S>,
T: 'static,
S: Clone + Send + Sync + 'static,
{
type State = S;
fn add_beet_route(
self,
router: Router<Self::State>,
route_info: RouteInfo,
) -> Router<Self::State> {
router.route(
&route_info.path.to_string_lossy(),
routing::on(route_info.method.into_axum_method(), self),
)
}
}