A simple CPU rendered GUI IDE experience.
Diffstat (limited to 'src/lsp/communication.rs')
-rw-r--r--src/lsp/communication.rs15
1 files changed, 15 insertions, 0 deletions
diff --git a/src/lsp/communication.rs b/src/lsp/communication.rs
index 7bc6b7c..30764a2 100644
--- a/src/lsp/communication.rs
+++ b/src/lsp/communication.rs
@@ -14,6 +14,7 @@ use lsp_types::notification::*;
use lsp_types::request::*;
use lsp_types::*;
use tokio::sync::oneshot;
+use tokio::time::error::Elapsed;
use winit::window::Window;
use crate::lsp::BehaviourAfter::{self, *};
@@ -148,6 +149,20 @@ impl super::Client {
) -> Result<X::Result, RequestError<X>> {
self.runtime.block_on(self.request_::<X, { Nil }>(y)?.0)
}
+ pub fn request_by<'me, X: Request>(
+ &'me self,
+ y: &X::Params,
+ d: tokio::time::Duration,
+ ) -> Result<Result<X::Result, RequestError<X>>, Elapsed> {
+ let _guard = self.runtime.enter();
+ self.runtime.block_on(tokio::time::timeout(
+ d,
+ match self.request_::<X, { Nil }>(y) {
+ Err(e) => return Ok(Err(e.into())),
+ Ok((x, _)) => x,
+ },
+ ))
+ }
pub fn request<'me, X: Request>(
&'me self,