diff --git a/src/custom_request.rs b/src/custom_request.rs index 2ef23c8..e95aca3 100644 --- a/src/custom_request.rs +++ b/src/custom_request.rs @@ -1,8 +1,12 @@ +use std::future; +use std::sync::Arc; use serde::Deserialize; use serde_json::{json, Value}; use tower_lsp::jsonrpc::Result; use tower_lsp::lsp_types::*; +use crate::server::Backend; + #[derive(Debug, Deserialize)] pub struct CustomRequestParams { // 定义你需要的参数 @@ -14,8 +18,18 @@ pub struct CustomResponse { result: serde_json::Value } +#[derive(Clone)] +pub struct CustomRequest; -pub async fn customRequest() -> Result { +impl <'a>tower_lsp::jsonrpc::Method<&'a Arc, (), Result> for CustomRequest { + type Future = future::Ready>; + + fn invoke(&self, _server: &'a Arc, _params: ()) -> Self::Future { + future::ready(customRequest()) + } +} + +pub fn customRequest() -> Result { // let command = params[0].clone(); // let message = String::from("receive command: ") + &command; diff --git a/src/main.rs b/src/main.rs index fe0785a..9312f76 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,6 +1,6 @@ #![recursion_limit = "256"] -use custom_request::customRequest; +use custom_request::CustomRequest; use log::info; use std::sync::Arc; use structopt::StructOpt; @@ -36,7 +36,7 @@ async fn main() { // let (service, socket) = LspService::new(|client| Arc::new(Backend::new(client, log_handle))); let (service, socket) = LspService::build(|client| Arc::new(Backend::new(client, log_handle))) - .custom_method("custom/request", customRequest) + .custom_method("custom/request", CustomRequest) .finish(); Server::new(stdin, stdout, socket)