aboutsummaryrefslogtreecommitdiff
path: root/src/k2v_util.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/k2v_util.rs')
-rw-r--r--src/k2v_util.rs29
1 files changed, 29 insertions, 0 deletions
diff --git a/src/k2v_util.rs b/src/k2v_util.rs
new file mode 100644
index 0000000..9dadab4
--- /dev/null
+++ b/src/k2v_util.rs
@@ -0,0 +1,29 @@
+use anyhow::Result;
+
+use k2v_client::{CausalValue, CausalityToken, K2vClient};
+
+// ---- UTIL: function to wait for a value to have changed in K2V ----
+
+pub async fn k2v_wait_value_changed(
+ k2v: &K2vClient,
+ pk: &str,
+ sk: &str,
+ prev_ct: &Option<CausalityToken>,
+) -> Result<CausalValue> {
+ loop {
+ if let Some(ct) = prev_ct {
+ match k2v.poll_item(pk, sk, ct.clone(), None).await? {
+ None => continue,
+ Some(cv) => return Ok(cv),
+ }
+ } else {
+ match k2v.read_item(pk, sk).await {
+ Err(k2v_client::Error::NotFound) => {
+ k2v.insert_item(pk, sk, vec![0u8], None).await?;
+ }
+ Err(e) => return Err(e.into()),
+ Ok(cv) => return Ok(cv),
+ }
+ }
+ }
+}