cruding_axum_api 0.2.2

axum Cruding api wrapper
Documentation
use super::state::{CrudableAxumState, CrudableAxumStateListExt};
use axum::{
    Router,
    routing::{get, post},
};

pub struct CrudRouter;

impl CrudRouter {
    pub fn base<S>() -> Router<S>
    where
        S: CrudableAxumState + Send + Sync + 'static,
        S::AxumCtx: Send,
        S::Error: Send,
    {
        Router::new()
            .route("/create", post(super::handlers::create::<S>))
            .route("/read", post(super::handlers::read::<S>))
            .route("/update", post(super::handlers::update::<S>))
            .route("/delete", post(super::handlers::delete::<S>))
    }

    pub fn with_list<S>() -> Router<S>
    where
        S: CrudableAxumStateListExt + Send + Sync + 'static,
        S::AxumCtx: Send,
        S::Error: Send,
    {
        Self::base::<S>().route("/list", get(super::handlers::read_list::<S>))
    }

    pub fn nested<S>(plugins: Option<Router<S>>) -> Router<S>
    where
        S: CrudableAxumState + Send + Sync + 'static,
        S::AxumCtx: Send,
        S::Error: Send,
    {
        let r = Self::base::<S>();
        let r = if let Some(p) = plugins { r.merge(p) } else { r };
        Router::new().nest(S::CRUD_NAME, r)
    }

    pub fn nested_with_list<S>(plugins: Option<Router<S>>) -> Router<S>
    where
        S: CrudableAxumStateListExt + Send + Sync + 'static,
        S::AxumCtx: Send,
        S::Error: Send,
    {
        let r = Self::with_list::<S>();
        let r = if let Some(p) = plugins { r.merge(p) } else { r };
        Router::new().nest(S::CRUD_NAME, r)
    }
}