diff --git a/Cargo.lock b/Cargo.lock index 5ad877c..396dd36 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -155,6 +155,15 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3a8241f3ebb85c056b509d4327ad0358fbbba6ffb340bf388f26350aeda225b1" +[[package]] +name = "bincode" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" +dependencies = [ + "serde", +] + [[package]] name = "bitflags" version = "1.3.2" @@ -200,7 +209,7 @@ checksum = "428d9aa8fbc0670b7b8d6030a7fadd0f86151cae55e4dbbece15f3780a3dfaf3" [[package]] name = "cargotom" -version = "0.15.0" +version = "0.15.1" dependencies = [ "clap", "git2", @@ -947,7 +956,7 @@ dependencies = [ [[package]] name = "macros" version = "0.2.0" -source = "git+https://github.com/frederik-uni/tcp-struct#1a1bad06167ea24ff744e8078b1b0c430c1eb23c" +source = "git+https://github.com/frederik-uni/tcp-struct#d3b3829be2a0417b238c31da0b029f96fe23df3f" dependencies = [ "once_cell", "proc-macro2", @@ -1638,13 +1647,13 @@ dependencies = [ [[package]] name = "tcp-struct" -version = "0.2.0" -source = "git+https://github.com/frederik-uni/tcp-struct#1a1bad06167ea24ff744e8078b1b0c430c1eb23c" +version = "0.3.0" +source = "git+https://github.com/frederik-uni/tcp-struct#d3b3829be2a0417b238c31da0b029f96fe23df3f" dependencies = [ + "bincode", "log", "macros", "serde", - "serde_json", "thiserror", "tokio", ] diff --git a/Cargo.toml b/Cargo.toml index 90d434b..c2c78b6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "cargotom" -version = "0.15.0" +version = "0.15.1" edition = "2021" [dependencies] diff --git a/src/crate_lookup.rs b/src/crate_lookup.rs index 10e0e32..3251cef 100644 --- a/src/crate_lookup.rs +++ b/src/crate_lookup.rs @@ -115,7 +115,7 @@ impl CratesIoStorage { true } pub fn stop(&self) { - exit(0) + exit(0); } pub async fn search(&self, query: &str) -> Vec<(String, Option, String)> { let lock = self.data.read().await; diff --git a/src/lsp.rs b/src/lsp.rs index 1af22e8..d218526 100644 --- a/src/lsp.rs +++ b/src/lsp.rs @@ -56,8 +56,8 @@ fn start_daemon(port: u16, storage: &Path, stable: bool, offline: bool, per_page impl Deamon { async fn handle_error(&self, e: tcp_struct::Error) { match e { - tcp_struct::Error::StreamError(error) => match error.kind() { - std::io::ErrorKind::ConnectionRefused => { + tcp_struct::Error::StreamError(error) => match error.kind.as_str() { + "connection refused" => { if let Deamon::Deamon((_, config, path)) = &self { start_daemon( config.daemon_port, @@ -416,29 +416,34 @@ impl LanguageServer for Backend { let daemon = CratesIoStorage::read(config.daemon_port, crate_version()); match daemon.update(config).await { Ok(_) => {} - Err(err) => match err { - tcp_struct::Error::StreamError(error) => match error.kind() { - std::io::ErrorKind::ConnectionRefused => start_daemon( - config.daemon_port, - &self.path, - config.stable, - config.offline, - config.per_page_web, - ), + Err(err) => { + self.client + .log_message(MessageType::INFO, format!("{err:?}")) + .await; + match err { + tcp_struct::Error::StreamError(error) => match error.kind.as_str() { + "connection refused" => start_daemon( + config.daemon_port, + &self.path, + config.stable, + config.offline, + config.per_page_web, + ), + _ => {} + }, + tcp_struct::Error::ApiMisMatch(_) => { + let _ = daemon.stop().await; + start_daemon( + config.daemon_port, + &self.path, + config.stable, + config.offline, + config.per_page_web, + ); + } _ => {} - }, - tcp_struct::Error::ApiMisMatch(_) => { - let _ = daemon.stop().await; - start_daemon( - config.daemon_port, - &self.path, - config.stable, - config.offline, - config.per_page_web, - ); } - _ => {} - }, + } } *self.crates.write().await = Deamon::Deamon((daemon, config, self.path.clone())); }