From 2ee34b432e7652a34ee64a706b5ebc1bce867dce Mon Sep 17 00:00:00 2001 From: hozan23 Date: Mon, 20 Nov 2023 22:19:02 +0300 Subject: jsonrpc: move RPCService to separate module --- jsonrpc/src/server.rs | 60 ++------------------------------------------------- 1 file changed, 2 insertions(+), 58 deletions(-) (limited to 'jsonrpc/src/server.rs') diff --git a/jsonrpc/src/server.rs b/jsonrpc/src/server.rs index 9642381..6c01a96 100644 --- a/jsonrpc/src/server.rs +++ b/jsonrpc/src/server.rs @@ -1,4 +1,4 @@ -use std::{collections::HashMap, future::Future, pin::Pin, sync::Arc}; +use std::{collections::HashMap, sync::Arc}; use log::{debug, error, warn}; use smol::lock::RwLock; @@ -11,6 +11,7 @@ use karyons_net::{listen, Conn, Endpoint, Listener}; use crate::{ message, + service::RPCService, utils::{read_until, write_all}, Error, Result, JSONRPC_VERSION, }; @@ -204,60 +205,3 @@ impl<'a> Server<'a> { } } } - -/// Represents the RPC method -pub type RPCMethod<'a> = Box RPCMethodOutput<'a> + Send + 'a>; -type RPCMethodOutput<'a> = - Pin> + Send + Sync + 'a>>; - -/// Defines the interface for an RPC service. -pub trait RPCService: Sync + Send { - fn get_method<'a>(&'a self, name: &'a str) -> Option; - fn name(&self) -> String; -} - -/// Implements the `RPCService` trait for a provided type. -/// -/// # Example -/// -/// ``` -/// use serde_json::Value; -/// -/// use karyons_jsonrpc::{JsonRPCError, register_service}; -/// -/// struct Hello {} -/// -/// impl Hello { -/// async fn say_hello(&self, params: Value) -> Result { -/// Ok(serde_json::json!("hello!")) -/// } -/// } -/// -/// register_service!(Hello, say_hello); -/// -/// ``` -#[macro_export] -macro_rules! register_service { - ($t:ty, $($m:ident),*) => { - impl karyons_jsonrpc::RPCService for $t { - fn get_method<'a>( - &'a self, - name: &'a str - ) -> Option { - match name { - $( - stringify!($m) => { - Some(Box::new(move |params: serde_json::Value| Box::pin(self.$m(params)))) - } - )* - _ => None, - } - - - } - fn name(&self) -> String{ - stringify!($t).to_string() - } - } - }; -} -- cgit v1.2.3