From d91e824e05acbf4fbd6003a0c1fa392d523337fa Mon Sep 17 00:00:00 2001 From: Simon Laux Date: Tue, 25 Oct 2022 22:35:12 +0200 Subject: [PATCH] add function to export method signatures for deltachat jsonrpc to help generating a nice ts interface --- yerpc-derive/src/ts.rs | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/yerpc-derive/src/ts.rs b/yerpc-derive/src/ts.rs index f29a212..741e7e0 100644 --- a/yerpc-derive/src/ts.rs +++ b/yerpc-derive/src/ts.rs @@ -5,6 +5,7 @@ use quote::quote; pub(crate) fn generate_typescript_generator(info: &RpcInfo) -> TokenStream { let mut gen_types = vec![]; let mut gen_methods = vec![]; + let mut raw_gen_methods = vec![]; for method in &info.methods { let (is_positional, gen_args) = match &method.input { Inputs::Positional(ref inputs) => { @@ -54,6 +55,11 @@ pub(crate) fn generate_typescript_generator(info: &RpcInfo) -> TokenStream { let method = Method::new(#ts_name, #rpc_name, args, #gen_output, #is_notification, #is_positional, #docs); out.push_str(&method.to_string(root_namespace)); )); + raw_gen_methods.push(quote!( + let args = vec![#(#gen_args),*]; + let method = Method::new(#ts_name, #rpc_name, args, #gen_output, #is_notification, #is_positional, #docs); + out.push(method); + )); } let outdir_path = info @@ -104,5 +110,15 @@ pub(crate) fn generate_typescript_generator(info: &RpcInfo) -> TokenStream { let ts_module = #ts_base.replace("#methods", &out); fs::write(&outdir.join("client.ts"), &ts_module).expect("Failed to write TS bindings"); } + + // #[cfg(test)] + /** exposes the methods so you can generate other stuff from it */ + pub fn raw_ts_binding_methods()-> Vec<::yerpc::typescript::Method> { + use ::yerpc::typescript::type_def::TypeDef; + use ::yerpc::typescript::Method; + let mut out:Vec = vec![]; + #(#raw_gen_methods)* + out + } } }