From 1c520b20f70ddbdab885ec6c4bf5c87893a26eb4 Mon Sep 17 00:00:00 2001
From: hozan23 <hozan23@karyontech.net>
Date: Sun, 19 May 2024 22:18:06 +0200
Subject: jsonrpc: remove jsonrpc_internal crate

---
 jsonrpc/Cargo.toml                    |  3 --
 jsonrpc/jsonrpc_internal/Cargo.toml   | 18 ----------
 jsonrpc/jsonrpc_internal/src/error.rs | 40 ---------------------
 jsonrpc/jsonrpc_internal/src/lib.rs   | 65 -----------------------------------
 jsonrpc/jsonrpc_macro/Cargo.toml      |  9 ++---
 jsonrpc/jsonrpc_macro/src/lib.rs      |  2 +-
 jsonrpc/src/error.rs                  | 40 +++++++++++++++++++++
 jsonrpc/src/lib.rs                    |  6 ++--
 jsonrpc/src/service.rs                | 64 ++++++++++++++++++++++++++++++++++
 9 files changed, 112 insertions(+), 135 deletions(-)
 delete mode 100644 jsonrpc/jsonrpc_internal/Cargo.toml
 delete mode 100644 jsonrpc/jsonrpc_internal/src/error.rs
 delete mode 100644 jsonrpc/jsonrpc_internal/src/lib.rs
 create mode 100644 jsonrpc/src/error.rs
 create mode 100644 jsonrpc/src/service.rs

diff --git a/jsonrpc/Cargo.toml b/jsonrpc/Cargo.toml
index e81ec10..cf49d6e 100644
--- a/jsonrpc/Cargo.toml
+++ b/jsonrpc/Cargo.toml
@@ -8,7 +8,6 @@ default = ["smol"]
 smol = [
   "karyon_core/smol",
   "karyon_net/smol",
-  "karyon_jsonrpc_internal/smol",
   "karyon_jsonrpc_macro/smol",
   "dep:futures-rustls",
   "async-tungstenite/async-std-runtime",
@@ -16,7 +15,6 @@ smol = [
 tokio = [
   "karyon_core/tokio",
   "karyon_net/tokio",
-  "karyon_jsonrpc_internal/tokio",
   "karyon_jsonrpc_macro/tokio",
   "async-tungstenite/tokio-runtime",
   "dep:tokio-rustls",
@@ -27,7 +25,6 @@ karyon_core = { workspace = true, default-features = false }
 karyon_net = { workspace = true, default-features = false }
 
 karyon_jsonrpc_macro = { path = "jsonrpc_macro", default-features = false }
-karyon_jsonrpc_internal = { path = "jsonrpc_internal", default-features = false }
 
 log = "0.4.21"
 rand = "0.8.5"
diff --git a/jsonrpc/jsonrpc_internal/Cargo.toml b/jsonrpc/jsonrpc_internal/Cargo.toml
deleted file mode 100644
index 5a3acc4..0000000
--- a/jsonrpc/jsonrpc_internal/Cargo.toml
+++ /dev/null
@@ -1,18 +0,0 @@
-[package]
-name = "karyon_jsonrpc_internal"
-version.workspace = true
-edition.workspace = true
-
-# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
-
-[features]
-default = ["smol"]
-smol = ["karyon_core/smol", "karyon_net/smol"]
-tokio = ["karyon_core/tokio", "karyon_net/tokio"]
-
-[dependencies]
-karyon_core = { workspace = true, default-features = false }
-karyon_net = { workspace = true, default-features = false }
-
-serde_json = "1.0.114"
-thiserror = "1.0.58"
diff --git a/jsonrpc/jsonrpc_internal/src/error.rs b/jsonrpc/jsonrpc_internal/src/error.rs
deleted file mode 100644
index 7f89729..0000000
--- a/jsonrpc/jsonrpc_internal/src/error.rs
+++ /dev/null
@@ -1,40 +0,0 @@
-use thiserror::Error as ThisError;
-
-pub type Result<T> = std::result::Result<T, Error>;
-
-/// Represents karyon's jsonrpc Error.
-#[derive(ThisError, Debug)]
-pub enum Error {
-    #[error(transparent)]
-    IO(#[from] std::io::Error),
-
-    #[error("Call Error: code: {0} msg: {1}")]
-    CallError(i32, String),
-
-    #[error("RPC Method Error:  code: {0} msg: {1}")]
-    RPCMethodError(i32, &'static str),
-
-    #[error("Invalid Params: {0}")]
-    InvalidParams(&'static str),
-
-    #[error("Invalid Request: {0}")]
-    InvalidRequest(&'static str),
-
-    #[error(transparent)]
-    ParseJSON(#[from] serde_json::Error),
-
-    #[error("Invalid Message Error: {0}")]
-    InvalidMsg(&'static str),
-
-    #[error("Unsupported protocol: {0}")]
-    UnsupportedProtocol(String),
-
-    #[error("Unexpected Error: {0}")]
-    General(&'static str),
-
-    #[error(transparent)]
-    KaryonCore(#[from] karyon_core::error::Error),
-
-    #[error(transparent)]
-    KaryonNet(#[from] karyon_net::Error),
-}
diff --git a/jsonrpc/jsonrpc_internal/src/lib.rs b/jsonrpc/jsonrpc_internal/src/lib.rs
deleted file mode 100644
index 95af82a..0000000
--- a/jsonrpc/jsonrpc_internal/src/lib.rs
+++ /dev/null
@@ -1,65 +0,0 @@
-mod error;
-use std::{future::Future, pin::Pin};
-
-pub use error::{Error, Result};
-
-/// Represents the RPC method
-pub type RPCMethod<'a> = Box<dyn Fn(serde_json::Value) -> RPCMethodOutput<'a> + Send + 'a>;
-type RPCMethodOutput<'a> =
-    Pin<Box<dyn Future<Output = Result<serde_json::Value>> + 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<RPCMethod>;
-    fn name(&self) -> String;
-}
-
-/// Implements the [`RPCService`] trait for a provided type.
-///
-/// # Example
-///
-/// ```
-/// use serde_json::Value;
-///
-/// use karyon_jsonrpc_internal::{Error, impl_rpc_service};
-///
-/// struct Hello {}
-///
-/// impl Hello {
-///     async fn foo(&self, params: Value) -> Result<Value, Error> {
-///         Ok(serde_json::json!("foo!"))
-///     }
-///
-///     async fn bar(&self, params: Value) -> Result<Value, Error> {
-///         Ok(serde_json::json!("bar!"))
-///     }
-/// }
-///
-/// impl_rpc_service!(Hello, foo, bar);
-///
-/// ```
-#[macro_export]
-macro_rules! impl_rpc_service {
-    ($t:ty, $($m:ident),*) => {
-        impl karyon_jsonrpc_internal::RPCService for $t {
-            fn get_method<'a>(
-                &'a self,
-                name: &'a str
-            ) -> Option<karyon_jsonrpc_internal::RPCMethod> {
-                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()
-            }
-        }
-    };
-}
diff --git a/jsonrpc/jsonrpc_macro/Cargo.toml b/jsonrpc/jsonrpc_macro/Cargo.toml
index 17140c5..f0af550 100644
--- a/jsonrpc/jsonrpc_macro/Cargo.toml
+++ b/jsonrpc/jsonrpc_macro/Cargo.toml
@@ -1,6 +1,6 @@
 [package]
 name = "karyon_jsonrpc_macro"
-version.workspace = true 
+version.workspace = true
 edition.workspace = true
 
 # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
@@ -10,15 +10,12 @@ proc-macro = true
 
 [features]
 default = ["smol"]
-smol = ["karyon_jsonrpc_internal/smol"]
-tokio = ["karyon_jsonrpc_internal/tokio"]
+smol = []
+tokio = []
 
 [dependencies]
-karyon_jsonrpc_internal = { path = "../jsonrpc_internal", default-features = false }
-
 proc-macro2 = "1.0"
 quote = "1.0"
 syn = { version = "1.0", features = ["full"] }
 
 serde_json = "1.0.114"
-
diff --git a/jsonrpc/jsonrpc_macro/src/lib.rs b/jsonrpc/jsonrpc_macro/src/lib.rs
index f2015d4..c3d51e8 100644
--- a/jsonrpc/jsonrpc_macro/src/lib.rs
+++ b/jsonrpc/jsonrpc_macro/src/lib.rs
@@ -39,7 +39,7 @@ pub fn rpc_impl(_attr: TokenStream, item: TokenStream) -> TokenStream {
 
     let item2: TokenStream2 = item.into();
     let quoted = quote! {
-            karyon_jsonrpc_internal::impl_rpc_service!(#self_ty, #(#methods),*);
+            karyon_jsonrpc::impl_rpc_service!(#self_ty, #(#methods),*);
             #item2
     };
 
diff --git a/jsonrpc/src/error.rs b/jsonrpc/src/error.rs
new file mode 100644
index 0000000..7f89729
--- /dev/null
+++ b/jsonrpc/src/error.rs
@@ -0,0 +1,40 @@
+use thiserror::Error as ThisError;
+
+pub type Result<T> = std::result::Result<T, Error>;
+
+/// Represents karyon's jsonrpc Error.
+#[derive(ThisError, Debug)]
+pub enum Error {
+    #[error(transparent)]
+    IO(#[from] std::io::Error),
+
+    #[error("Call Error: code: {0} msg: {1}")]
+    CallError(i32, String),
+
+    #[error("RPC Method Error:  code: {0} msg: {1}")]
+    RPCMethodError(i32, &'static str),
+
+    #[error("Invalid Params: {0}")]
+    InvalidParams(&'static str),
+
+    #[error("Invalid Request: {0}")]
+    InvalidRequest(&'static str),
+
+    #[error(transparent)]
+    ParseJSON(#[from] serde_json::Error),
+
+    #[error("Invalid Message Error: {0}")]
+    InvalidMsg(&'static str),
+
+    #[error("Unsupported protocol: {0}")]
+    UnsupportedProtocol(String),
+
+    #[error("Unexpected Error: {0}")]
+    General(&'static str),
+
+    #[error(transparent)]
+    KaryonCore(#[from] karyon_core::error::Error),
+
+    #[error(transparent)]
+    KaryonNet(#[from] karyon_net::Error),
+}
diff --git a/jsonrpc/src/lib.rs b/jsonrpc/src/lib.rs
index 4ec03cc..3062512 100644
--- a/jsonrpc/src/lib.rs
+++ b/jsonrpc/src/lib.rs
@@ -68,13 +68,15 @@
 
 mod client;
 mod codec;
+mod error;
 pub mod message;
 mod server;
+mod service;
 
 pub use client::Client;
 pub use server::Server;
 
-pub use karyon_jsonrpc_internal::{impl_rpc_service, RPCMethod, RPCService};
-pub use karyon_jsonrpc_internal::{Error, Result};
+pub use error::{Error, Result};
 pub use karyon_jsonrpc_macro::rpc_impl;
 pub use karyon_net::Endpoint;
+pub use service::{RPCMethod, RPCService};
diff --git a/jsonrpc/src/service.rs b/jsonrpc/src/service.rs
new file mode 100644
index 0000000..4c8c4b8
--- /dev/null
+++ b/jsonrpc/src/service.rs
@@ -0,0 +1,64 @@
+use std::{future::Future, pin::Pin};
+
+use crate::Result;
+
+/// Represents the RPC method
+pub type RPCMethod<'a> = Box<dyn Fn(serde_json::Value) -> RPCMethodOutput<'a> + Send + 'a>;
+type RPCMethodOutput<'a> =
+    Pin<Box<dyn Future<Output = Result<serde_json::Value>> + 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<RPCMethod>;
+    fn name(&self) -> String;
+}
+
+/// Implements the [`RPCService`] trait for a provided type.
+///
+/// # Example
+///
+/// ```
+/// use serde_json::Value;
+///
+/// use karyon_jsonrpc::{Error, impl_rpc_service};
+///
+/// struct Hello {}
+///
+/// impl Hello {
+///     async fn foo(&self, params: Value) -> Result<Value, Error> {
+///         Ok(serde_json::json!("foo!"))
+///     }
+///
+///     async fn bar(&self, params: Value) -> Result<Value, Error> {
+///         Ok(serde_json::json!("bar!"))
+///     }
+/// }
+///
+/// impl_rpc_service!(Hello, foo, bar);
+///
+/// ```
+#[macro_export]
+macro_rules! impl_rpc_service {
+    ($t:ty, $($m:ident),*) => {
+        impl karyon_jsonrpc::RPCService for $t {
+            fn get_method<'a>(
+                &'a self,
+                name: &'a str
+            ) -> Option<karyon_jsonrpc::RPCMethod> {
+                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