reifydb_core/interceptor/
view.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::ViewDef, value::encoded::EncodedValues,
8};
9
10// PRE INSERT
11define_interceptor!(
12	context: ViewPreInsertContext<T>,
13	trait: ViewPreInsertInterceptor,
14	fields: {
15		txn: &'a mut T,
16		view: &'a ViewDef,
17		rn: RowNumber,
18		row: &'a EncodedValues}
19);
20
21define_closure_interceptor!(
22	ClosureViewPreInsertInterceptor,
23	ViewPreInsertInterceptor,
24	ViewPreInsertContext,
25	with_transaction
26);
27
28define_api_function!(
29	view_pre_insert,
30	ClosureViewPreInsertInterceptor<T, F>,
31	ViewPreInsertContext<T>
32);
33
34// POST INSERT
35define_interceptor!(
36	context: ViewPostInsertContext<T>,
37	trait: ViewPostInsertInterceptor,
38	fields: {
39		txn: &'a mut T,
40		view: &'a ViewDef,
41		id: RowNumber,
42		row: &'a EncodedValues}
43);
44
45define_closure_interceptor!(
46	ClosureViewPostInsertInterceptor,
47	ViewPostInsertInterceptor,
48	ViewPostInsertContext,
49	with_transaction
50);
51
52define_api_function!(
53	view_post_insert,
54	ClosureViewPostInsertInterceptor<T, F>,
55	ViewPostInsertContext<T>
56);
57
58// PRE UPDATE
59define_interceptor!(
60	context: ViewPreUpdateContext<T>,
61	trait: ViewPreUpdateInterceptor,
62	fields: {
63		txn: &'a mut T,
64		view: &'a ViewDef,
65		id: RowNumber,
66		row: &'a EncodedValues}
67);
68
69define_closure_interceptor!(
70	ClosureViewPreUpdateInterceptor,
71	ViewPreUpdateInterceptor,
72	ViewPreUpdateContext,
73	with_transaction
74);
75
76define_api_function!(
77	view_pre_update,
78	ClosureViewPreUpdateInterceptor<T, F>,
79	ViewPreUpdateContext<T>
80);
81
82// POST UPDATE
83define_interceptor!(
84	context: ViewPostUpdateContext<T>,
85	trait: ViewPostUpdateInterceptor,
86	fields: {
87		txn: &'a mut T,
88		view: &'a ViewDef,
89		id: RowNumber,
90		row: &'a EncodedValues,
91		old_row: &'a EncodedValues}
92);
93
94define_closure_interceptor!(
95	ClosureViewPostUpdateInterceptor,
96	ViewPostUpdateInterceptor,
97	ViewPostUpdateContext,
98	with_transaction
99);
100
101define_api_function!(
102	view_post_update,
103	ClosureViewPostUpdateInterceptor<T, F>,
104	ViewPostUpdateContext<T>
105);
106
107// PRE DELETE
108define_interceptor!(
109	context: ViewPreDeleteContext<T>,
110	trait: ViewPreDeleteInterceptor,
111	fields: {
112		txn: &'a mut T,
113		view: &'a ViewDef,
114		id: RowNumber}
115);
116
117define_closure_interceptor!(
118	ClosureViewPreDeleteInterceptor,
119	ViewPreDeleteInterceptor,
120	ViewPreDeleteContext,
121	with_transaction
122);
123
124define_api_function!(
125	view_pre_delete,
126	ClosureViewPreDeleteInterceptor<T, F>,
127	ViewPreDeleteContext<T>
128);
129
130// POST DELETE
131define_interceptor!(
132	context: ViewPostDeleteContext<T>,
133	trait: ViewPostDeleteInterceptor,
134	fields: {
135		txn: &'a mut T,
136		view: &'a ViewDef,
137		id: RowNumber,
138		deleted_row: &'a EncodedValues}
139);
140
141define_closure_interceptor!(
142	ClosureViewPostDeleteInterceptor,
143	ViewPostDeleteInterceptor,
144	ViewPostDeleteContext,
145	with_transaction
146);
147
148define_api_function!(
149	view_post_delete,
150	ClosureViewPostDeleteInterceptor<T, F>,
151	ViewPostDeleteContext<T>
152);
153
154impl_register_interceptor!(
155	ClosureViewPreInsertInterceptor<T, F>,
156	ViewPreInsertContext<T>,
157	ViewPreInsertInterceptor,
158	view_pre_insert
159);
160
161impl_register_interceptor!(
162	ClosureViewPostInsertInterceptor<T, F>,
163	ViewPostInsertContext<T>,
164	ViewPostInsertInterceptor,
165	view_post_insert
166);
167
168impl_register_interceptor!(
169	ClosureViewPreUpdateInterceptor<T, F>,
170	ViewPreUpdateContext<T>,
171	ViewPreUpdateInterceptor,
172	view_pre_update
173);
174
175impl_register_interceptor!(
176	ClosureViewPostUpdateInterceptor<T, F>,
177	ViewPostUpdateContext<T>,
178	ViewPostUpdateInterceptor,
179	view_post_update
180);
181
182impl_register_interceptor!(
183	ClosureViewPreDeleteInterceptor<T, F>,
184	ViewPreDeleteContext<T>,
185	ViewPreDeleteInterceptor,
186	view_pre_delete
187);
188
189impl_register_interceptor!(
190	ClosureViewPostDeleteInterceptor<T, F>,
191	ViewPostDeleteContext<T>,
192	ViewPostDeleteInterceptor,
193	view_post_delete
194);