icydb_core/db/response/
write.rs1use crate::{
2 traits::{AsView, EntityValue},
3 types::Id,
4 view::View as EntityView,
5};
6
7#[derive(Debug)]
15pub struct WriteResponse<E> {
16 entity: E,
17}
18
19impl<E> WriteResponse<E> {
20 #[must_use]
22 pub const fn new(entity: E) -> Self {
23 Self { entity }
24 }
25
26 #[must_use]
28 pub fn entity(self) -> E {
29 self.entity
30 }
31
32 #[must_use]
34 pub fn key(&self) -> Id<E>
35 where
36 E: EntityValue,
37 {
38 self.entity.id()
39 }
40
41 #[must_use]
43 pub fn view(&self) -> EntityView<E>
44 where
45 E: AsView,
46 {
47 self.entity.as_view()
48 }
49}
50
51#[derive(Debug)]
59pub struct WriteBatchResponse<E> {
60 entries: Vec<WriteResponse<E>>,
61}
62
63impl<E> WriteBatchResponse<E> {
64 #[must_use]
66 pub fn new(entities: Vec<E>) -> Self {
67 Self {
68 entries: entities.into_iter().map(WriteResponse::new).collect(),
69 }
70 }
71
72 #[must_use]
74 pub fn entries(&self) -> &[WriteResponse<E>] {
75 &self.entries
76 }
77
78 #[must_use]
80 pub const fn len(&self) -> usize {
81 self.entries.len()
82 }
83
84 #[must_use]
86 pub const fn is_empty(&self) -> bool {
87 self.entries.is_empty()
88 }
89
90 #[must_use]
92 pub fn entities(self) -> Vec<E> {
93 self.entries
94 .into_iter()
95 .map(WriteResponse::entity)
96 .collect()
97 }
98
99 #[must_use]
101 pub fn keys(&self) -> Vec<Id<E>>
102 where
103 E: EntityValue,
104 {
105 self.entries.iter().map(WriteResponse::key).collect()
106 }
107
108 #[must_use]
110 pub fn views(&self) -> Vec<EntityView<E>>
111 where
112 E: AsView,
113 {
114 self.entries.iter().map(WriteResponse::view).collect()
115 }
116}
117
118impl<E> IntoIterator for WriteBatchResponse<E> {
119 type Item = WriteResponse<E>;
120 type IntoIter = std::vec::IntoIter<WriteResponse<E>>;
121
122 fn into_iter(self) -> Self::IntoIter {
123 self.entries.into_iter()
124 }
125}
126
127impl<E> WriteBatchResponse<E> {
128 pub fn iter(&self) -> std::slice::Iter<'_, WriteResponse<E>> {
129 self.entries.iter()
130 }
131}
132
133impl<'a, E> IntoIterator for &'a WriteBatchResponse<E> {
134 type Item = &'a WriteResponse<E>;
135 type IntoIter = std::slice::Iter<'a, WriteResponse<E>>;
136
137 fn into_iter(self) -> Self::IntoIter {
138 self.iter()
139 }
140}