From 19220178311ca80374f6f5ff4069c0adcaab932d Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Thu, 5 Jan 2023 11:27:18 +0100 Subject: [PATCH] Properly handle empty node catalog --- Cargo.toml | 5 ++++- examples/test.rs | 24 ++++++++++++++++++++++++ src/lib.rs | 4 ++-- 3 files changed, 30 insertions(+), 3 deletions(-) create mode 100644 examples/test.rs diff --git a/Cargo.toml b/Cargo.toml index 06c2143..a36f28b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,7 +2,7 @@ name = "df-consul" description = "Deuxfleurs' async Rust bindings for (a subset of) the Consul HTTP API" authors = [ "Alex Auvolat " ] -version = "0.1.0" +version = "0.2.0" edition = "2021" license = "MIT" repository = "https://git.deuxfleurs.fr/Deuxfleurs/df-consul" @@ -15,3 +15,6 @@ serde = { version = "1.0.149", features = ["derive"] } log = "0.4" bytes = "1" reqwest = { version = "0.11", default-features = false, features = ["json", "rustls-tls-manual-roots" ] } + +[dev-dependencies] +tokio = { version = "1.22", features = ["rt", "rt-multi-thread", "macros"] } diff --git a/examples/test.rs b/examples/test.rs new file mode 100644 index 0000000..e7c34c8 --- /dev/null +++ b/examples/test.rs @@ -0,0 +1,24 @@ +use df_consul::*; + +#[tokio::main] +async fn main() { + let config = ConsulConfig { + addr: "http://localhost:8500".into(), + ca_cert: None, + tls_skip_verify: false, + client_cert: None, + client_key: None, + }; + + let consul = Consul::new(config, "").unwrap(); + + println!("== LIST NODES =="); + let list_nodes = consul.list_nodes().await.unwrap(); + println!("{:?}", list_nodes); + + println!("== CATALOG 1 =="); + println!("{:?}", consul.watch_node("caribou", None).await.unwrap()); + + println!("== CATALOG 2 =="); + println!("{:?}", consul.watch_node("cariacou", None).await.unwrap()); +} diff --git a/src/lib.rs b/src/lib.rs index 75091e1..8a9ad53 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -146,7 +146,7 @@ impl Consul { &self, host: &str, idx: Option, - ) -> Result<(ConsulNodeCatalog, usize)> { + ) -> Result<(Option, usize)> { debug!("watch_node {} {:?}", host, idx); let url = match idx { @@ -160,7 +160,7 @@ impl Consul { None => bail!("X-Consul-Index header not found"), }; - let resp: ConsulNodeCatalog = http.json().await?; + let resp: Option = http.json().await?; Ok((resp, new_idx)) }