4 use std::{fmt::Debug, future::Future, marker::PhantomData, pin::Pin, task::Poll};
10 //~^ ERROR not all trait items implemented, missing: `Error`
11 // don't implement `Error` here for the ICE
14 pub struct Server<I, S>(I, S);
16 pub fn serve<I, S>(_: S) -> Server<I, S> {
20 impl<S, B> Future for Server<(), S>
22 S: MakeServiceRef<(), (), ResBody = B>,
28 fn poll(self: Pin<&mut Self>, _: &mut std::task::Context<'_>) -> Poll<Self::Output> {
33 pub trait MakeServiceRef<Target, ReqBody> {
37 impl<T, S> MakeServiceRef<(), ()> for T
39 T: for<'a> Service<&'a (), Response = S>,
45 pub struct MakeServiceFn<F>(pub F);
46 pub struct ServiceFn<F, R>(pub PhantomData<(F, R)>);
48 pub trait Service<Request> {
52 impl<'t, F, Ret, Target, Svc> Service<&'t Target> for MakeServiceFn<F>
55 Ret: Future<Output = Result<Svc, ()>>,
60 impl<F, ReqBody, Ret, ResBody, E> Service<ReqBody> for ServiceFn<F, ReqBody>
63 Ret: Future<Output = Result<ResBody, E>>,
65 type Response = ResBody;
69 async fn smarvice() -> Result<(), ()> {
73 fn service_fn<F, R, S>(f: F) -> hyper::ServiceFn<F, R>
77 hyper::ServiceFn(std::marker::PhantomData)
81 let service = hyper::MakeServiceFn(|| async { Ok::<_, ()>(service_fn(|| smarvice())) });
82 hyper::serve::<(), _>(service).await;