diff options
author | Alex Auvolat <alex@adnab.me> | 2023-01-05 11:27:18 +0100 |
---|---|---|
committer | Alex Auvolat <alex@adnab.me> | 2023-01-05 11:27:18 +0100 |
commit | 19220178311ca80374f6f5ff4069c0adcaab932d (patch) | |
tree | 0c93f733cda141a39474f79b69d4658523cf5278 | |
parent | b0af49c24c0f8e006e02704d398318cf74ae1d6f (diff) | |
download | df-consul-19220178311ca80374f6f5ff4069c0adcaab932d.tar.gz df-consul-19220178311ca80374f6f5ff4069c0adcaab932d.zip |
Properly handle empty node catalog
-rw-r--r-- | Cargo.toml | 5 | ||||
-rw-r--r-- | examples/test.rs | 24 | ||||
-rw-r--r-- | src/lib.rs | 4 |
3 files changed, 30 insertions, 3 deletions
@@ -2,7 +2,7 @@ name = "df-consul" description = "Deuxfleurs' async Rust bindings for (a subset of) the Consul HTTP API" authors = [ "Alex Auvolat <alex@adnab.me>" ] -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()); +} @@ -146,7 +146,7 @@ impl Consul { &self, host: &str, idx: Option<usize>, - ) -> Result<(ConsulNodeCatalog, usize)> { + ) -> Result<(Option<ConsulNodeCatalog>, 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<ConsulNodeCatalog> = http.json().await?; Ok((resp, new_idx)) } |