Skip to content

Instantly share code, notes, and snippets.

@pplanel
Created December 9, 2024 14:34
Show Gist options
  • Select an option

  • Save pplanel/9af17f4ae7cc4d611d527c621c1837ed to your computer and use it in GitHub Desktop.

Select an option

Save pplanel/9af17f4ae7cc4d611d527c621c1837ed to your computer and use it in GitHub Desktop.

Revisions

  1. pplanel created this gist Dec 9, 2024.
    76 changes: 76 additions & 0 deletions lib.rs
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,76 @@
    #![allow(warnings)]

    use std::marker::PhantomData;

    fn foo() {
    fn handler(State(s): State<AppState>) {
    todo!()
    }
    let state = AppState {};
    let app: Router<AppState, Body> = Router::new().route("/", get(handler)).with_state(state);
    }

    #[derive(Clone)]
    struct AppState {}

    struct Body {}

    #[derive(Debug)]
    struct Request<Body> {
    _marker: PhantomData<Body>,
    }

    struct Router<State, Body> {
    _marker: std::marker::PhantomData<(State, Body)>,
    }

    impl<State, Body> Router<State, Body> {
    fn new() -> Self {
    todo!()
    }

    fn route(self, path: &str, service: MethodRouter<State, Body>) -> Self {
    todo!()
    }

    fn with_state(self, state: State) -> Self {
    todo!()
    }
    }

    trait Service<R> {}

    struct MethodRouter<State, Body> {
    _marker: std::marker::PhantomData<(State, Body)>,
    }

    fn get<H, T, State, Body>(handler: H) -> MethodRouter<State, Body>
    where
    H: Handler<T, State, Body>,
    {
    todo!()
    }

    trait Handler<HandlerInput, State, Body> {}

    trait FromRequest<State, Body> {}

    impl<State, Body, F> Handler<(), State, Body> for F where F: Fn() {}
    impl<State, Body, F, T1> Handler<(T1,), State, Body> for F
    where
    F: Fn(T1),
    T1: FromRequest<State, Body>,
    {
    }
    impl<State, Body, F, T1, T2> Handler<(T1, T2), State, Body> for F
    where
    F: Fn(T1, T2),
    T1: FromRequest<State, Body>,
    T2: FromRequest<State, Body>,
    {
    }

    struct State<S>(S);

    impl<S, B> FromRequest<S, B> for State<S> {}
    impl<S, B> FromRequest<S, B> for () {}