Skip to main content

reifydb_codec/row/queue_attempt/
mod.rs

1// SPDX-License-Identifier: Apache-2.0
2// Copyright (c) 2026 ReifyDB
3
4use 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		// SAFETY: EncodedQueueAttemptRow is repr(transparent) over EncodedBytes, so the pointer cast
25		// preserves layout, and the returned reference borrows the same allocation for the same lifetime.
26		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}