Skip to content

Commit

Permalink
Improve JSON-RPC layer
Browse files Browse the repository at this point in the history
  • Loading branch information
efoerster committed May 6, 2019
1 parent 2c98086 commit 853cc8c
Show file tree
Hide file tree
Showing 17 changed files with 761 additions and 278 deletions.
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
/target
target/
**/*.rs.bk
/.idea
219 changes: 62 additions & 157 deletions Cargo.lock

Large diffs are not rendered by default.

9 changes: 6 additions & 3 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,14 @@ authors = [
"Patrick Förster <[email protected]>"]
edition = "2018"

[workspace]
members = ["./jsonrpc", "./jsonrpc_derive"]

[dependencies]
jsonrpc = { path = "jsonrpc" }
jsonrpc-derive = { path = "jsonrpc_derive" }
lsp-types = "0.56.0"
futures-preview = { version = "0.3.0-alpha.14", features = ["compat"] }
jsonrpc-core = "11.0.0"
jsonrpc-core-client = "11.0.0"
futures-preview = { version = "0.3.0-alpha.15", features = ["compat"] }
serde = { version = "1.0.90", features = ["derive", "rc"] }
serde_json = "1.0.39"
tokio = "0.1"
Expand Down
235 changes: 235 additions & 0 deletions jsonrpc/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

13 changes: 13 additions & 0 deletions jsonrpc/Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
[package]
name = "jsonrpc"
version = "0.1.0"
authors = [
"Eric Förster <[email protected]>",
"Patrick Förster <[email protected]>"]
edition = "2018"

[dependencies]
futures-preview = { version = "0.3.0-alpha.15", features = ["compat"] }
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
serde_repr = "0.1"
36 changes: 36 additions & 0 deletions jsonrpc/src/lib.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
#![feature(await_macro, async_await)]

mod server;
mod types;

pub use self::server::*;
pub use self::types::*;

#[macro_export]
macro_rules! handle_message {
($message:ident, $server:ident) => {{
use jsonrpc::*;

let handle = async move |message| {
let message: Message = serde_json::from_str(message).map_err(|_| Error {
code: ErrorCode::ParseError,
message: "Could not parse the input".to_owned(),
data: serde_json::Value::Null,
})?;

match message {
Message::Request(request) => Ok(Some(await!($server.handle_request(request)))),
Message::Notification(notification) => {
await!($server.handle_notification(notification));
Ok(None)
}
Message::Response(_) => panic!("Unexpected client response"),
}
};

match await!(handle(&$message)) {
Ok(response) => response,
Err(error) => Some(Response::new(serde_json::Value::Null, Some(error), None)),
}
}};
}
Loading

0 comments on commit 853cc8c

Please sign in to comment.