reifydb_codec/row/queue_attempt/
mod.rs1use std::ops::Deref;
5
6use reifydb_value::value::datetime::DateTime;
7
8use crate::row::{
9 bytes::{
10 EncodedBytes, EncodedRowBuilder, QUEUE_ATTEMPT_HEADER_SIZE, RowBuilder, read_created_at,
11 read_defined_at, read_fingerprint, read_finished_at, read_lost, read_outcome, read_updated_at,
12 sealed::Sealed, write_fingerprint, write_finished_at, write_lost, write_outcome, write_storage_time,
13 write_timestamps,
14 },
15 shape::fingerprint::RowShapeFingerprint,
16};
17
18#[repr(transparent)]
19#[derive(Debug, Clone, PartialEq)]
20pub struct EncodedQueueAttemptRow(EncodedBytes);
21
22impl EncodedQueueAttemptRow {
23 pub fn view(bytes: &EncodedBytes) -> &Self {
24 unsafe { &*(bytes as *const EncodedBytes as *const Self) }
27 }
28
29 pub fn bytes(&self) -> &EncodedBytes {
30 &self.0
31 }
32
33 pub fn as_slice(&self) -> &[u8] {
34 self.0.as_slice()
35 }
36
37 pub fn into_bytes(self) -> EncodedBytes {
38 self.0
39 }
40
41 #[inline]
42 pub fn fingerprint(&self) -> RowShapeFingerprint {
43 read_fingerprint(&self.0)
44 }
45
46 #[inline]
47 pub fn created_at(&self) -> DateTime {
48 read_created_at(&self.0)
49 }
50
51 #[inline]
52 pub fn updated_at(&self) -> DateTime {
53 read_updated_at(&self.0)
54 }
55
56 #[inline]
57 pub fn outcome(&self) -> u8 {
58 read_outcome(&self.0)
59 }
60
61 #[inline]
62 pub fn lost(&self) -> bool {
63 read_lost(&self.0)
64 }
65
66 #[inline]
67 pub fn finished_at(&self) -> DateTime {
68 read_finished_at(&self.0)
69 }
70
71 #[inline]
72 pub fn is_defined(&self, index: usize) -> bool {
73 read_defined_at(&self.0, QUEUE_ATTEMPT_HEADER_SIZE, index)
74 }
75
76 pub fn body(&self) -> &[u8] {
77 &self.0[QUEUE_ATTEMPT_HEADER_SIZE..]
78 }
79}
80
81impl From<EncodedQueueAttemptRow> for EncodedBytes {
82 fn from(row: EncodedQueueAttemptRow) -> Self {
83 row.0
84 }
85}
86
87impl From<EncodedBytes> for EncodedQueueAttemptRow {
88 fn from(bytes: EncodedBytes) -> Self {
89 Self(bytes)
90 }
91}
92
93#[repr(transparent)]
94#[derive(Debug, Clone, PartialEq, Eq)]
95pub struct EncodedQueueAttemptRowBuilder(EncodedRowBuilder);
96
97impl EncodedQueueAttemptRowBuilder {
98 pub(crate) fn wrap(builder: EncodedRowBuilder) -> Self {
99 Self(builder)
100 }
101
102 #[inline]
103 pub fn fingerprint(&self) -> RowShapeFingerprint {
104 read_fingerprint(self.as_slice())
105 }
106
107 pub fn set_fingerprint(&mut self, fingerprint: RowShapeFingerprint) {
108 write_fingerprint(self.as_mut_slice(), fingerprint);
109 }
110
111 #[inline]
112 pub fn created_at(&self) -> DateTime {
113 read_created_at(self.as_slice())
114 }
115
116 #[inline]
117 pub fn updated_at(&self) -> DateTime {
118 read_updated_at(self.as_slice())
119 }
120
121 pub fn set_timestamps(&mut self, created_at: DateTime, updated_at: DateTime) {
122 write_timestamps(self.as_mut_slice(), created_at, updated_at);
123 }
124
125 pub fn set_time(&mut self, time: DateTime) {
126 write_storage_time(self.as_mut_slice(), time);
127 }
128
129 #[inline]
130 pub fn outcome(&self) -> u8 {
131 read_outcome(self.as_slice())
132 }
133
134 pub fn set_outcome(&mut self, outcome: u8) {
135 write_outcome(self.as_mut_slice(), outcome);
136 }
137
138 #[inline]
139 pub fn lost(&self) -> bool {
140 read_lost(self.as_slice())
141 }
142
143 pub fn set_lost(&mut self, lost: bool) {
144 write_lost(self.as_mut_slice(), lost);
145 }
146
147 #[inline]
148 pub fn finished_at(&self) -> DateTime {
149 read_finished_at(self.as_slice())
150 }
151
152 pub fn set_finished_at(&mut self, finished_at: DateTime) {
153 write_finished_at(self.as_mut_slice(), finished_at);
154 }
155
156 #[inline]
157 pub fn is_defined(&self, index: usize) -> bool {
158 read_defined_at(self.as_slice(), QUEUE_ATTEMPT_HEADER_SIZE, index)
159 }
160
161 pub fn body(&self) -> &[u8] {
162 &self.as_slice()[QUEUE_ATTEMPT_HEADER_SIZE..]
163 }
164
165 pub fn freeze(self) -> EncodedQueueAttemptRow {
166 EncodedQueueAttemptRow(self.0.freeze())
167 }
168}
169
170impl Sealed for EncodedQueueAttemptRowBuilder {
171 fn buffer(&self) -> &Vec<u8> {
172 self.0.buffer()
173 }
174
175 fn buffer_mut(&mut self) -> &mut Vec<u8> {
176 self.0.buffer_mut()
177 }
178
179 fn take_buffer(self) -> Vec<u8> {
180 self.0.take_buffer()
181 }
182}
183
184impl EncodedQueueAttemptRow {
185 pub fn thaw(self) -> EncodedQueueAttemptRowBuilder {
186 EncodedQueueAttemptRowBuilder(self.0.thaw())
187 }
188}
189
190impl Deref for EncodedQueueAttemptRowBuilder {
191 type Target = [u8];
192
193 fn deref(&self) -> &Self::Target {
194 self.as_slice()
195 }
196}