use std::{convert::AsRef, fmt::Debug}; use conduit::{implement, Result}; use futures::{ future, stream::{Stream, StreamExt}, TryStreamExt, }; use serde::{Deserialize, Serialize}; use crate::keyval::{result_deserialize_key, serialize_key, Key}; #[implement(super::Map)] pub fn rev_keys_prefix<'a, K, P>(&'a self, prefix: &P) -> impl Stream>> + Send where P: Serialize + ?Sized + Debug, K: Deserialize<'a> + Send, { self.rev_keys_prefix_raw(prefix) .map(result_deserialize_key::) } #[implement(super::Map)] #[tracing::instrument(skip(self), level = "trace")] pub fn rev_keys_prefix_raw

(&self, prefix: &P) -> impl Stream>> + Send where P: Serialize + ?Sized + Debug, { let key = serialize_key(prefix).expect("failed to serialize query key"); self.rev_raw_keys_from(&key) .try_take_while(move |k: &Key<'_>| future::ok(k.starts_with(&key))) } #[implement(super::Map)] pub fn rev_keys_raw_prefix<'a, K, P>(&'a self, prefix: &'a P) -> impl Stream>> + Send + 'a where P: AsRef<[u8]> + ?Sized + Debug + Sync + 'a, K: Deserialize<'a> + Send + 'a, { self.rev_raw_keys_prefix(prefix) .map(result_deserialize_key::) } #[implement(super::Map)] pub fn rev_raw_keys_prefix<'a, P>(&'a self, prefix: &'a P) -> impl Stream>> + Send + 'a where P: AsRef<[u8]> + ?Sized + Debug + Sync + 'a, { self.rev_raw_keys_from(prefix) .try_take_while(|k: &Key<'_>| future::ok(k.starts_with(prefix.as_ref()))) }