rpc_toolkit_macro_internals/rpc_server/
build.rs

1use proc_macro2::TokenStream;
2use quote::quote;
3
4use super::*;
5
6pub fn build(mut args: RpcServerArgs) -> TokenStream {
7    let ctx = std::mem::replace(
8        &mut args.ctx,
9        parse2(quote! { __rpc_toolkit__rpc_server__context }).unwrap(),
10    );
11    let handler = crate::rpc_handler::build::build(args);
12    let res = quote! {
13        {
14            let __rpc_toolkit__rpc_server__context = #ctx;
15            let __rpc_toolkit__rpc_server__builder = ::rpc_toolkit::rpc_server_helpers::make_builder(&__rpc_toolkit__rpc_server__context);
16            let handler = #handler;
17            __rpc_toolkit__rpc_server__builder.serve(::rpc_toolkit::hyper::service::make_service_fn(move |_| {
18                let handler = handler.clone();
19                async move { Ok::<_, ::std::convert::Infallible>(::rpc_toolkit::hyper::service::service_fn(move |req| handler(req))) }
20            }))
21        }
22    };
23    // panic!("{}", res);
24    res
25}