reifydb_core/interceptor/
ringbuffer.rs

1use std::marker::PhantomData;
2
3use reifydb_type::RowNumber;
4
5use crate::{
6	define_api_function, define_closure_interceptor, define_interceptor, impl_register_interceptor,
7	interface::RingBufferDef, value::encoded::EncodedValues,
8};
9
10// PRE INSERT
11define_interceptor!(
12	context: RingBufferPreInsertContext<T>,
13	trait: RingBufferPreInsertInterceptor,
14	fields: {
15		txn: &'a mut T,
16		ringbuffer: &'a RingBufferDef,
17		row: &'a EncodedValues}
18);
19
20define_closure_interceptor!(
21	ClosureRingBufferPreInsertInterceptor,
22	RingBufferPreInsertInterceptor,
23	RingBufferPreInsertContext,
24	with_transaction
25);
26
27define_api_function!(
28	ringbuffer_pre_insert,
29	ClosureRingBufferPreInsertInterceptor<T, F>,
30	RingBufferPreInsertContext<T>
31);
32
33// POST INSERT
34define_interceptor!(
35	context: RingBufferPostInsertContext<T>,
36	trait: RingBufferPostInsertInterceptor,
37	fields: {
38		txn: &'a mut T,
39		ringbuffer: &'a RingBufferDef,
40		id: RowNumber,
41		row: &'a EncodedValues}
42);
43
44define_closure_interceptor!(
45	ClosureRingBufferPostInsertInterceptor,
46	RingBufferPostInsertInterceptor,
47	RingBufferPostInsertContext,
48	with_transaction
49);
50
51define_api_function!(
52	ringbuffer_post_insert,
53	ClosureRingBufferPostInsertInterceptor<T, F>,
54	RingBufferPostInsertContext<T>
55);
56
57// PRE UPDATE
58define_interceptor!(
59	context: RingBufferPreUpdateContext<T>,
60	trait: RingBufferPreUpdateInterceptor,
61	fields: {
62		txn: &'a mut T,
63		ringbuffer: &'a RingBufferDef,
64		id: RowNumber,
65		row: &'a EncodedValues}
66);
67
68define_closure_interceptor!(
69	ClosureRingBufferPreUpdateInterceptor,
70	RingBufferPreUpdateInterceptor,
71	RingBufferPreUpdateContext,
72	with_transaction
73);
74
75define_api_function!(
76	ringbuffer_pre_update,
77	ClosureRingBufferPreUpdateInterceptor<T, F>,
78	RingBufferPreUpdateContext<T>
79);
80
81// POST UPDATE
82define_interceptor!(
83	context: RingBufferPostUpdateContext<T>,
84	trait: RingBufferPostUpdateInterceptor,
85	fields: {
86		txn: &'a mut T,
87		ringbuffer: &'a RingBufferDef,
88		id: RowNumber,
89		row: &'a EncodedValues,
90		old_row: &'a EncodedValues}
91);
92
93define_closure_interceptor!(
94	ClosureRingBufferPostUpdateInterceptor,
95	RingBufferPostUpdateInterceptor,
96	RingBufferPostUpdateContext,
97	with_transaction
98);
99
100define_api_function!(
101	ringbuffer_post_update,
102	ClosureRingBufferPostUpdateInterceptor<T, F>,
103	RingBufferPostUpdateContext<T>
104);
105
106// PRE DELETE
107define_interceptor!(
108	context: RingBufferPreDeleteContext<T>,
109	trait: RingBufferPreDeleteInterceptor,
110	fields: {
111		txn: &'a mut T,
112		ringbuffer: &'a RingBufferDef,
113		id: RowNumber}
114);
115
116define_closure_interceptor!(
117	ClosureRingBufferPreDeleteInterceptor,
118	RingBufferPreDeleteInterceptor,
119	RingBufferPreDeleteContext,
120	with_transaction
121);
122
123define_api_function!(
124	ringbuffer_pre_delete,
125	ClosureRingBufferPreDeleteInterceptor<T, F>,
126	RingBufferPreDeleteContext<T>
127);
128
129// POST DELETE
130define_interceptor!(
131	context: RingBufferPostDeleteContext<T>,
132	trait: RingBufferPostDeleteInterceptor,
133	fields: {
134		txn: &'a mut T,
135		ringbuffer: &'a RingBufferDef,
136		id: RowNumber,
137		deleted_row: &'a EncodedValues}
138);
139
140define_closure_interceptor!(
141	ClosureRingBufferPostDeleteInterceptor,
142	RingBufferPostDeleteInterceptor,
143	RingBufferPostDeleteContext,
144	with_transaction
145);
146
147define_api_function!(
148	ringbuffer_post_delete,
149	ClosureRingBufferPostDeleteInterceptor<T, F>,
150	RingBufferPostDeleteContext<T>
151);
152
153impl_register_interceptor!(
154	ClosureRingBufferPreInsertInterceptor<T, F>,
155	RingBufferPreInsertContext<T>,
156	RingBufferPreInsertInterceptor,
157	ringbuffer_pre_insert
158);
159
160impl_register_interceptor!(
161	ClosureRingBufferPostInsertInterceptor<T, F>,
162	RingBufferPostInsertContext<T>,
163	RingBufferPostInsertInterceptor,
164	ringbuffer_post_insert
165);
166
167impl_register_interceptor!(
168	ClosureRingBufferPreUpdateInterceptor<T, F>,
169	RingBufferPreUpdateContext<T>,
170	RingBufferPreUpdateInterceptor,
171	ringbuffer_pre_update
172);
173
174impl_register_interceptor!(
175	ClosureRingBufferPostUpdateInterceptor<T, F>,
176	RingBufferPostUpdateContext<T>,
177	RingBufferPostUpdateInterceptor,
178	ringbuffer_post_update
179);
180
181impl_register_interceptor!(
182	ClosureRingBufferPreDeleteInterceptor<T, F>,
183	RingBufferPreDeleteContext<T>,
184	RingBufferPreDeleteInterceptor,
185	ringbuffer_pre_delete
186);
187
188impl_register_interceptor!(
189	ClosureRingBufferPostDeleteInterceptor<T, F>,
190	RingBufferPostDeleteContext<T>,
191	RingBufferPostDeleteInterceptor,
192	ringbuffer_post_delete
193);