icydb_core/db/response/
ext.rs

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