• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

getdozer / dozer / 4370280743

pending completion
4370280743

push

github

GitHub
Bump async-trait from 0.1.65 to 0.1.66 (#1179)

27808 of 38702 relevant lines covered (71.85%)

25323.55 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

67.86
/dozer-cache/src/reader.rs
1
use crate::cache::{expression::QueryExpression, RecordWithId, RoCache};
2

3
use super::cache::expression::FilterExpression;
4
use crate::errors::CacheError;
5
use dozer_types::{
6
    serde,
7
    types::{IndexDefinition, Record, Schema},
8
};
9
use serde::{Deserialize, Serialize};
10

11
#[derive(Debug, PartialEq, Serialize, Deserialize, Clone)]
10✔
12
#[serde(crate = "self::serde")]
13

14
/// This filter gets dynamically added to the query.
15
pub struct AccessFilter {
16
    /// FilterExpression to evaluate access
17
    pub filter: Option<FilterExpression>,
18

19
    /// Fields to be restricted
20
    pub fields: Vec<String>,
21
}
22

23
#[derive(Debug)]
×
24
/// CacheReader dynamically attaches permissions on top of queries
25
pub struct CacheReader {
26
    cache: Box<dyn RoCache>,
27
}
28

29
impl CacheReader {
30
    pub fn new(cache: Box<dyn RoCache>) -> Self {
120✔
31
        Self { cache }
120✔
32
    }
120✔
33

34
    // TODO: Implement check_access
35
    fn check_access(&self, _rec: &Record, _access_filter: &AccessFilter) -> Result<(), CacheError> {
6✔
36
        Ok(())
6✔
37
    }
6✔
38

39
    pub fn get_schema(&self) -> Result<&(Schema, Vec<IndexDefinition>), CacheError> {
126✔
40
        self.cache.get_schema()
126✔
41
    }
126✔
42

×
43
    pub fn get(
6✔
44
        &self,
6✔
45
        key: &[u8],
6✔
46
        access_filter: &AccessFilter,
6✔
47
    ) -> Result<RecordWithId, CacheError> {
6✔
48
        let record = self.cache.get(key)?;
6✔
49
        match self.check_access(&record.record, access_filter) {
6✔
50
            Ok(_) => Ok(record),
6✔
51
            Err(e) => Err(e),
×
52
        }
×
53
    }
6✔
54

×
55
    pub fn query(
108✔
56
        &self,
108✔
57
        query: &mut QueryExpression,
108✔
58
        access_filter: AccessFilter,
108✔
59
    ) -> Result<Vec<RecordWithId>, CacheError> {
108✔
60
        self.apply_access_filter(query, access_filter);
108✔
61
        self.cache.query(query)
108✔
62
    }
108✔
63

×
64
    pub fn count(
84✔
65
        &self,
84✔
66
        query: &mut QueryExpression,
84✔
67
        access_filter: AccessFilter,
84✔
68
    ) -> Result<usize, CacheError> {
84✔
69
        self.apply_access_filter(query, access_filter);
84✔
70
        self.cache.count(query)
84✔
71
    }
84✔
72

×
73
    // Apply filter if specified in access
×
74
    fn apply_access_filter(&self, query: &mut QueryExpression, access_filter: AccessFilter) {
×
75
        // TODO: Use `fields` in `access_filter`.
×
76
        if let Some(access_filter) = access_filter.filter {
192✔
77
            let filter = match query.filter.take() {
×
78
                Some(query_filter) => FilterExpression::And(vec![access_filter, query_filter]),
×
79
                None => access_filter,
×
80
            };
81

×
82
            query.filter = Some(filter);
×
83
        }
192✔
84
    }
192✔
85
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc