mirror of
https://github.com/juspay/hyperswitch.git
synced 2025-10-29 09:07:09 +08:00
db: Added Reverse lookup table (#147)
This commit is contained in:
@ -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,
|
||||
|
||||
Reference in New Issue
Block a user