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