summaryrefslogtreecommitdiff
path: root/support/texlab/crates/jsonrpc/src/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'support/texlab/crates/jsonrpc/src/lib.rs')
-rw-r--r--support/texlab/crates/jsonrpc/src/lib.rs67
1 files changed, 0 insertions, 67 deletions
diff --git a/support/texlab/crates/jsonrpc/src/lib.rs b/support/texlab/crates/jsonrpc/src/lib.rs
deleted file mode 100644
index 3a771e6ba5..0000000000
--- a/support/texlab/crates/jsonrpc/src/lib.rs
+++ /dev/null
@@ -1,67 +0,0 @@
-pub mod client;
-pub mod server;
-mod types;
-
-pub use self::{
- client::{Client, ResponseHandler},
- server::{handle_notification, handle_request, Middleware, RequestHandler},
- types::*,
-};
-
-use futures::{channel::mpsc, prelude::*};
-use log::error;
-use std::sync::Arc;
-
-#[derive(Debug)]
-pub struct MessageHandler<S, C> {
- pub server: Arc<S>,
- pub client: Arc<C>,
- pub output: mpsc::Sender<String>,
-}
-
-impl<S, C> MessageHandler<S, C>
-where
- S: RequestHandler + Middleware + Send + Sync + 'static,
- C: ResponseHandler + Send + Sync + 'static,
-{
- pub async fn handle(&mut self, json: &str) {
- self.server.before_message().await;
-
- match serde_json::from_str(json).map_err(|_| Error::parse_error()) {
- Ok(Message::Request(request)) => {
- let server = Arc::clone(&self.server);
- let mut output = self.output.clone();
- tokio::spawn(async move {
- let response = server.handle_request(request).await;
- if let Some(error) = response.error.as_ref() {
- error!("{:?}", error);
- }
- let json = serde_json::to_string(&response).unwrap();
- output.send(json).await.unwrap();
- server.after_message().await;
- });
- }
- Ok(Message::Notification(notification)) => {
- self.server.handle_notification(notification).await;
- self.after_message();
- }
- Ok(Message::Response(response)) => {
- self.client.handle(response).await;
- self.after_message();
- }
- Err(why) => {
- let response = Response::error(why, None);
- let json = serde_json::to_string(&response).unwrap();
- self.output.send(json).await.unwrap();
- self.after_message();
- }
- };
- }
-
- fn after_message(&self) {
- let server = Arc::clone(&self.server);
- tokio::spawn(async move {
- server.after_message().await;
- });
- }
-}