From e48e6dfe67ffff75d8e89723ebbe8c443a1e78e8 Mon Sep 17 00:00:00 2001 From: Tim Kuehn Date: Tue, 30 Jul 2019 21:31:22 -0700 Subject: [PATCH] Add nice error message for ident collisions --- plugins/src/lib.rs | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/plugins/src/lib.rs b/plugins/src/lib.rs index 96db027..5ea9180 100644 --- a/plugins/src/lib.rs +++ b/plugins/src/lib.rs @@ -46,10 +46,24 @@ impl Parse for Service { let ident = input.parse()?; let content; braced!(content in input); - let mut rpcs = Vec::new(); + let mut rpcs = Vec::::new(); while !content.is_empty() { rpcs.push(content.parse()?); } + for rpc in &rpcs { + if rpc.ident == "new" { + return Err(syn::Error::new( + rpc.ident.span(), + format!("method name conflicts with generated fn `{}Client::new`", ident) + )) + } + if rpc.ident == "serve" { + return Err(syn::Error::new( + rpc.ident.span(), + format!("method name conflicts with generated fn `{}::serve`", ident) + )) + } + } Ok(Service { attrs, vis, @@ -83,19 +97,19 @@ impl Parse for RpcMethod { FnArg::SelfRef(self_ref) => { return Err(syn::Error::new( self_ref.span(), - "RPC args cannot start with self", + "method args cannot start with self", )) } FnArg::SelfValue(self_val) => { return Err(syn::Error::new( self_val.span(), - "RPC args cannot start with self", + "method args cannot start with self", )) } arg => { return Err(syn::Error::new( arg.span(), - "RPC args must be explicitly typed patterns", + "method args must be explicitly typed patterns", )) } })