// edition:2018
// check-pass

#![warn(rust_2021_compatibility)]

use std::future::Future;

struct Runtime;

impl Runtime {
    pub fn block_on<F: Future>(&self, _future: F) -> F::Output {
        unimplemented!()
    }
}

pub fn http<F, Fut>(_func: F)
where
    F: Fn() -> Fut,
    Fut: Future<Output = ()>,
{
    let rt = Runtime {};
    let srv = rt.block_on(async move { serve(move || async move { unimplemented!() }) });
    let _ = || rt.block_on(async { srv });
}

pub struct Server<S> {
    _marker: std::marker::PhantomData<S>,
}

pub fn serve<S>(_new_service: S) -> Server<S> {
    unimplemented!()
}

fn main() { }
