diff options
Diffstat (limited to 'jsonrpc/jsonrpc_macro')
| -rw-r--r-- | jsonrpc/jsonrpc_macro/Cargo.toml | 26 | ||||
| -rw-r--r-- | jsonrpc/jsonrpc_macro/src/lib.rs | 85 | 
2 files changed, 0 insertions, 111 deletions
diff --git a/jsonrpc/jsonrpc_macro/Cargo.toml b/jsonrpc/jsonrpc_macro/Cargo.toml deleted file mode 100644 index cf001e1..0000000 --- a/jsonrpc/jsonrpc_macro/Cargo.toml +++ /dev/null @@ -1,26 +0,0 @@ -[package] -name = "karyon_jsonrpc_macro" -description = "Internal crate for Karyon library." -version.workspace = true -edition.workspace = true -homepage.workspace = true -repository.workspace = true -license.workspace = true -authors.workspace = true - -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - -[lib] -proc-macro = true - -[features] -default = ["smol"] -smol = [] -tokio = [] - -[dependencies] -proc-macro2 = "1.0" -quote = "1.0" -syn = { version = "2.0", features = ["full"] } - -serde_json = "1.0.117" diff --git a/jsonrpc/jsonrpc_macro/src/lib.rs b/jsonrpc/jsonrpc_macro/src/lib.rs deleted file mode 100644 index ecca5b1..0000000 --- a/jsonrpc/jsonrpc_macro/src/lib.rs +++ /dev/null @@ -1,85 +0,0 @@ -use proc_macro::TokenStream; -use proc_macro2::{Ident, TokenStream as TokenStream2}; -use quote::quote; -use syn::{parse_macro_input, spanned::Spanned, ImplItem, ItemImpl, Type}; - -macro_rules! err { -    ($($tt:tt)*) => { -        return syn::Error::new($($tt)*).to_compile_error().into() -    }; -} - -#[proc_macro_attribute] -pub fn rpc_impl(_attr: TokenStream, item: TokenStream) -> TokenStream { -    let mut methods: Vec<Ident> = vec![]; - -    let item2 = item.clone(); -    let parsed_input = parse_macro_input!(item2 as ItemImpl); - -    let self_ty = match *parsed_input.self_ty { -        Type::Path(p) => p, -        _ => err!( -            parsed_input.span(), -            "implementing the trait `RPCService` on this type is unsupported" -        ), -    }; - -    if parsed_input.items.is_empty() { -        err!(self_ty.span(), "At least one method should be implemented"); -    } - -    for item in parsed_input.items { -        match item { -            ImplItem::Fn(method) => { -                methods.push(method.sig.ident); -            } -            _ => err!(item.span(), "unexpected item"), -        } -    } - -    let item2: TokenStream2 = item.into(); -    let quoted = quote! { -            karyon_jsonrpc::impl_rpc_service!(#self_ty, #(#methods),*); -            #item2 -    }; - -    quoted.into() -} - -// TODO remove duplicate code -#[proc_macro_attribute] -pub fn rpc_pubsub_impl(_attr: TokenStream, item: TokenStream) -> TokenStream { -    let mut methods: Vec<Ident> = vec![]; - -    let item2 = item.clone(); -    let parsed_input = parse_macro_input!(item2 as ItemImpl); - -    let self_ty = match *parsed_input.self_ty { -        Type::Path(p) => p, -        _ => err!( -            parsed_input.span(), -            "implementing the trait `RPCService` on this type is unsupported" -        ), -    }; - -    if parsed_input.items.is_empty() { -        err!(self_ty.span(), "At least one method should be implemented"); -    } - -    for item in parsed_input.items { -        match item { -            ImplItem::Fn(method) => { -                methods.push(method.sig.ident); -            } -            _ => err!(item.span(), "unexpected item"), -        } -    } - -    let item2: TokenStream2 = item.into(); -    let quoted = quote! { -            karyon_jsonrpc::impl_pubsub_rpc_service!(#self_ty, #(#methods),*); -            #item2 -    }; - -    quoted.into() -}  | 
