tuwunel_database/map/
qry.rs1use std::{convert::AsRef, fmt::Debug, io::Write, sync::Arc};
2
3use futures::Future;
4use serde::Serialize;
5use tuwunel_core::{Result, arrayvec::ArrayVec, implement};
6
7use crate::{Handle, keyval::KeyBuf, ser};
8
9#[implement(super::Map)]
13#[inline]
14pub fn qry<K>(
15 self: &Arc<Self>,
16 key: &K,
17) -> impl Future<Output = Result<Handle<'_>>> + Send + use<'_, K>
18where
19 K: Serialize + ?Sized + Debug,
20{
21 let mut buf = KeyBuf::new();
22 self.bqry(key, &mut buf)
23}
24
25#[implement(super::Map)]
29#[inline]
30pub fn aqry<const MAX: usize, K>(
31 self: &Arc<Self>,
32 key: &K,
33) -> impl Future<Output = Result<Handle<'_>>> + Send + use<'_, MAX, K>
34where
35 K: Serialize + ?Sized + Debug,
36{
37 let mut buf = ArrayVec::<u8, MAX>::new();
38 self.bqry(key, &mut buf)
39}
40
41#[implement(super::Map)]
44#[tracing::instrument(skip(self, buf), level = "trace")]
45pub fn bqry<K, B>(
46 self: &Arc<Self>,
47 key: &K,
48 buf: &mut B,
49) -> impl Future<Output = Result<Handle<'_>>> + Send + use<'_, K, B>
50where
51 K: Serialize + ?Sized + Debug,
52 B: Write + AsRef<[u8]>,
53{
54 let key = ser::serialize(buf, key).expect("failed to serialize query key");
55 self.get(key)
56}