tuwunel_database/map/del_prefix.rs
1use std::{fmt::Debug, sync::Arc};
2
3use serde::Serialize;
4use tuwunel_core::{
5 implement,
6 utils::stream::{ReadyExt, TryIgnore},
7};
8
9/// Deletes every key visible under a serialized prefix.
10///
11/// The operation scans a consistent iterator view, so later writes can remain.
12/// When debug assertions are disabled, scan errors are filtered after any
13/// preceding keys have been removed.
14///
15/// # Panics
16///
17/// Panics if the prefix cannot be serialized, a scan error occurs with debug
18/// assertions enabled, RocksDB rejects a deletion, or an uncorked flush fails.
19#[implement(super::Map)]
20#[tracing::instrument(level = "trace", skip(self))]
21pub async fn del_prefix<P>(self: &Arc<Self>, prefix: &P)
22where
23 P: Serialize + ?Sized + Debug + Sync,
24{
25 self.keys_prefix_raw(prefix)
26 .ignore_err()
27 .ready_for_each(|key| self.remove(&key))
28 .await;
29}