wp_knowledge/
cache_util.rs1use crate::cache::CacheAble;
2use wp_error::KnowledgeResult;
3use wp_log::warn_kdb;
4use wp_model_core::model::DataField;
5
6use crate::mem::RowData;
7
8pub fn cache_query_impl<const N: usize>(
10 c_params: &[DataField; N],
11 cache: &mut impl CacheAble<DataField, RowData, N>,
12 query_fn: impl FnOnce() -> KnowledgeResult<RowData>,
13) -> RowData {
14 if let Some(hit) = cache.fetch(c_params) {
15 return hit.clone();
16 }
17 match query_fn() {
18 Ok(rows) => {
19 cache.save(c_params, rows.clone());
20 rows
21 }
22 Err(e) => {
23 warn_kdb!("[kdb] query error: {}", e);
24 Vec::new()
25 }
26 }
27}