diff options
Diffstat (limited to 'src/k2v_util.rs')
-rw-r--r-- | src/k2v_util.rs | 29 |
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), + } + } + } +} |