rpc_toolkit_macro_internals/rpc_server/
build.rs1use 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 res
25}