summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Auvolat <alex@adnab.me>2023-01-05 11:27:18 +0100
committerAlex Auvolat <alex@adnab.me>2023-01-05 11:27:18 +0100
commit19220178311ca80374f6f5ff4069c0adcaab932d (patch)
tree0c93f733cda141a39474f79b69d4658523cf5278
parentb0af49c24c0f8e006e02704d398318cf74ae1d6f (diff)
downloaddf-consul-19220178311ca80374f6f5ff4069c0adcaab932d.tar.gz
df-consul-19220178311ca80374f6f5ff4069c0adcaab932d.zip
Properly handle empty node catalog
-rw-r--r--Cargo.toml5
-rw-r--r--examples/test.rs24
-rw-r--r--src/lib.rs4
3 files changed, 30 insertions, 3 deletions
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 <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());
+}
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<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))
}