icydb_core/db/response/
ext.rs

1use crate::{db::response::Response, error::InternalError, key::Key, traits::EntityKind};
2
3///
4/// ResponseExt
5/// Ergonomic helpers for interpreting `Result<Response<E>, InternalError>`.
6///
7pub trait ResponseExt<E: EntityKind> {
8    // --- entities ---
9
10    fn entities(self) -> Result<Vec<E>, InternalError>;
11    fn one_entity(self) -> Result<E, InternalError>;
12    fn one_opt_entity(self) -> Result<Option<E>, InternalError>;
13
14    // --- primary keys ---
15
16    fn pks(self) -> Result<Vec<E::PrimaryKey>, InternalError>;
17    fn one_pk(self) -> Result<E::PrimaryKey, InternalError>;
18    fn one_opt_pk(self) -> Result<Option<E::PrimaryKey>, InternalError>;
19
20    // --- keys ---
21
22    fn keys(self) -> Result<Vec<Key>, InternalError>;
23    fn one_key(self) -> Result<Key, InternalError>;
24    fn one_opt_key(self) -> Result<Option<Key>, InternalError>;
25
26    // --- views ---
27
28    fn views(self) -> Result<Vec<E::ViewType>, InternalError>;
29    fn one_view(self) -> Result<E::ViewType, InternalError>;
30    fn one_opt_view(self) -> Result<Option<E::ViewType>, InternalError>;
31
32    // --- introspection ---
33
34    fn count(self) -> Result<u32, InternalError>;
35}
36
37impl<E: EntityKind> ResponseExt<E> for Result<Response<E>, InternalError> {
38    // --- entities ---
39    fn entities(self) -> Result<Vec<E>, InternalError> {
40        Ok(self?.entities())
41    }
42
43    fn one_entity(self) -> Result<E, InternalError> {
44        self?.one_entity()
45    }
46
47    fn one_opt_entity(self) -> Result<Option<E>, InternalError> {
48        self?.one_opt_entity()
49    }
50
51    // --- primary keys ---
52
53    fn pks(self) -> Result<Vec<E::PrimaryKey>, InternalError> {
54        Ok(self?.pks())
55    }
56
57    fn one_pk(self) -> Result<E::PrimaryKey, InternalError> {
58        self?.one_pk()
59    }
60
61    fn one_opt_pk(self) -> Result<Option<E::PrimaryKey>, InternalError> {
62        self?.one_opt_pk()
63    }
64
65    // keys
66
67    fn keys(self) -> Result<Vec<Key>, InternalError> {
68        Ok(self?.keys())
69    }
70
71    fn one_key(self) -> Result<Key, InternalError> {
72        self?.one_key()
73    }
74
75    fn one_opt_key(self) -> Result<Option<Key>, InternalError> {
76        self?.one_opt_key()
77    }
78
79    // --- views ---
80
81    fn views(self) -> Result<Vec<E::ViewType>, InternalError> {
82        Ok(self?.views())
83    }
84
85    fn one_view(self) -> Result<E::ViewType, InternalError> {
86        self?.one_view()
87    }
88
89    fn one_opt_view(self) -> Result<Option<E::ViewType>, InternalError> {
90        self?.one_opt_view()
91    }
92
93    // --- introspection ---
94
95    fn count(self) -> Result<u32, InternalError> {
96        Ok(self?.count())
97    }
98}