db: Added Reverse lookup table (#147)

This commit is contained in:
Kartikeya Hegde
2022-12-19 18:50:05 +05:30
committed by GitHub
parent d6a3e508e2
commit 87fed68519
51 changed files with 937 additions and 201 deletions

View File

@ -10,7 +10,7 @@ use std::fmt::Debug;
use common_utils::{
errors::CustomResult,
ext_traits::{ByteSliceExt, Encode},
ext_traits::{ByteSliceExt, Encode, StringExt},
};
use error_stack::{IntoReport, ResultExt};
use fred::{
@ -20,7 +20,8 @@ use fred::{
RedisKey, RedisMap, RedisValue, SetOptions, XCap, XReadResponse,
},
};
use router_env::{tracing, tracing::instrument};
use futures::StreamExt;
use router_env::{logger, tracing, tracing::instrument};
use crate::{
errors,
@ -245,6 +246,56 @@ impl super::RedisConnectionPool {
.await
}
#[instrument(level = "DEBUG", skip(self))]
pub async fn hscan(
&self,
key: &str,
pattern: &str,
count: Option<u32>,
) -> CustomResult<Vec<String>, errors::RedisError> {
Ok(self
.pool
.hscan::<&str, &str>(key, pattern, count)
.filter_map(|value| async move {
match value {
Ok(mut v) => {
let v = v.take_results()?;
let v: Vec<String> =
v.iter().filter_map(|(_, val)| val.as_string()).collect();
Some(futures::stream::iter(v))
}
Err(err) => {
logger::error!(?err);
None
}
}
})
.flatten()
.collect::<Vec<_>>()
.await)
}
#[instrument(level = "DEBUG", skip(self))]
pub async fn hscan_and_deserialize<T>(
&self,
key: &str,
pattern: &str,
count: Option<u32>,
) -> CustomResult<Vec<T>, errors::RedisError>
where
T: serde::de::DeserializeOwned,
{
let redis_results = self.hscan(key, pattern, count).await?;
Ok(redis_results
.iter()
.filter_map(|v| {
let r: T = v.parse_struct(std::any::type_name::<T>()).ok()?;
Some(r)
})
.collect())
}
#[instrument(level = "DEBUG", skip(self))]
pub async fn get_hash_field<V>(
&self,