1use crate::{
2 RadixAbiBatchViewV1, RadixAbiCallContextV1, RadixAbiHashSinkV1, RadixAbiHeaderV1,
3 RadixAbiResultBuilderV1, RadixAbiSliceV1, RadixAbiStatusV1, RadixAbiStringV1,
4 RadixAbiTypeRefV1, RadixAbiValueV1,
5};
6
7pub type RadixAbiCodecFnV1 = unsafe extern "C" fn(
8 context: *const RadixAbiCallContextV1,
9 input: *const RadixAbiValueV1,
10 output: *const RadixAbiResultBuilderV1,
11) -> RadixAbiStatusV1;
12pub type RadixAbiParseFnV1 = unsafe extern "C" fn(
13 context: *const RadixAbiCallContextV1,
14 input: RadixAbiSliceV1,
15 output: *const RadixAbiResultBuilderV1,
16) -> RadixAbiStatusV1;
17pub type RadixAbiEqualFnV1 = unsafe extern "C" fn(
18 context: *const RadixAbiCallContextV1,
19 left: *const RadixAbiValueV1,
20 right: *const RadixAbiValueV1,
21 output: *mut u8,
22) -> RadixAbiStatusV1;
23pub type RadixAbiCompareFnV1 = unsafe extern "C" fn(
24 context: *const RadixAbiCallContextV1,
25 left: *const RadixAbiValueV1,
26 right: *const RadixAbiValueV1,
27 output: *mut i8,
28) -> RadixAbiStatusV1;
29pub type RadixAbiHashFnV1 = unsafe extern "C" fn(
30 context: *const RadixAbiCallContextV1,
31 value: *const RadixAbiValueV1,
32 sink: *const RadixAbiHashSinkV1,
33) -> RadixAbiStatusV1;
34pub type RadixAbiScalarFnV1 = unsafe extern "C" fn(
35 context: *const RadixAbiCallContextV1,
36 arguments: *const RadixAbiValueV1,
37 argument_count: u32,
38 output: *const RadixAbiResultBuilderV1,
39) -> RadixAbiStatusV1;
40pub type RadixAbiBatchFnV1 = unsafe extern "C" fn(
41 context: *const RadixAbiCallContextV1,
42 input: *const RadixAbiBatchViewV1,
43 output: *const RadixAbiResultBuilderV1,
44) -> RadixAbiStatusV1;
45pub type RadixAbiPlannerSupportFnV1 = unsafe extern "C" fn(
46 context: *const RadixAbiCallContextV1,
47 normalized_predicate: RadixAbiSliceV1,
48 output: *const RadixAbiResultBuilderV1,
49) -> RadixAbiStatusV1;
50
51#[repr(C)]
52#[derive(Clone, Copy)]
53pub struct RadixAbiExternalTypeDescriptorV1 {
54 pub header: RadixAbiHeaderV1,
55 pub object_id: [u8; 16],
56 pub local_id: RadixAbiStringV1,
57 pub display_name: RadixAbiStringV1,
58 pub codec_version: u32,
59 pub semantic_revision: u32,
60 pub storage_kind: u16,
61 pub reserved_u16: u16,
62 pub fixed_bytes: u32,
63 pub max_bytes: u32,
64 pub reserved_u32: u32,
65 pub capabilities: u64,
66 pub codec_fingerprint: [u8; 32],
67 pub encode: Option<RadixAbiCodecFnV1>,
68 pub decode: Option<RadixAbiParseFnV1>,
69 pub equality: Option<RadixAbiEqualFnV1>,
70 pub hash: Option<RadixAbiHashFnV1>,
71 pub ordering: Option<RadixAbiCompareFnV1>,
72 pub text_input: Option<RadixAbiParseFnV1>,
73 pub text_output: Option<RadixAbiCodecFnV1>,
74 pub binary_input: Option<RadixAbiParseFnV1>,
75 pub binary_output: Option<RadixAbiCodecFnV1>,
76}
77
78#[repr(C)]
79#[derive(Clone, Copy)]
80pub struct RadixAbiScalarFunctionDescriptorV1 {
81 pub header: RadixAbiHeaderV1,
82 pub object_id: [u8; 16],
83 pub local_id: RadixAbiStringV1,
84 pub display_name: RadixAbiStringV1,
85 pub semantic_revision: u32,
86 pub argument_count: u32,
87 pub arguments: *const RadixAbiTypeRefV1,
88 pub result: RadixAbiTypeRefV1,
89 pub volatility: u16,
90 pub cancellation: u16,
91 pub strict: u8,
92 pub parallel_safe: u8,
93 pub reserved_u16: u16,
94 pub cost: u32,
95 pub max_output_bytes: u32,
96 pub scalar: Option<RadixAbiScalarFnV1>,
97 pub batch: Option<RadixAbiBatchFnV1>,
98}
99
100#[repr(C)]
101#[derive(Clone, Copy)]
102pub struct RadixAbiOperatorDescriptorV1 {
103 pub header: RadixAbiHeaderV1,
104 pub object_id: [u8; 16],
105 pub local_id: RadixAbiStringV1,
106 pub symbol: RadixAbiStringV1,
107 pub semantic_revision: u32,
108 pub reserved: u32,
109 pub left: RadixAbiTypeRefV1,
110 pub right: RadixAbiTypeRefV1,
111 pub result: RadixAbiTypeRefV1,
112 pub function_id: [u8; 16],
113}
114
115#[repr(C)]
116#[derive(Debug, Clone, Copy)]
117pub struct RadixAbiBindingEntryV1 {
118 pub slot: u16,
119 pub flags: u16,
120 pub object_id: [u8; 16],
121}
122
123pub type RadixAbiKeyEncodeFnV1 = unsafe extern "C" fn(
124 context: *const RadixAbiCallContextV1,
125 value: *const RadixAbiValueV1,
126 output: *const RadixAbiResultBuilderV1,
127) -> RadixAbiStatusV1;
128
129#[repr(C)]
130#[derive(Clone, Copy)]
131pub struct RadixAbiOperatorClassDescriptorV1 {
132 pub header: RadixAbiHeaderV1,
133 pub object_id: [u8; 16],
134 pub local_id: RadixAbiStringV1,
135 pub semantic_revision: u32,
136 pub access_method: u16,
137 pub reserved_u16: u16,
138 pub input_type: RadixAbiTypeRefV1,
139 pub key_type: RadixAbiTypeRefV1,
140 pub key_codec_revision: u32,
141 pub strategy_count: u32,
142 pub strategies: *const RadixAbiBindingEntryV1,
143 pub support_count: u32,
144 pub reserved_u32: u32,
145 pub supports: *const RadixAbiBindingEntryV1,
146 pub fingerprint: [u8; 32],
147 pub encode_key: Option<RadixAbiKeyEncodeFnV1>,
148}
149
150#[repr(C)]
151#[derive(Clone, Copy)]
152pub struct RadixAbiPlannerSupportDescriptorV1 {
153 pub header: RadixAbiHeaderV1,
154 pub object_id: [u8; 16],
155 pub local_id: RadixAbiStringV1,
156 pub semantic_revision: u32,
157 pub max_spans: u32,
158 pub max_output_bytes: u32,
159 pub recheck_policy: u16,
160 pub reserved_u16: u16,
161 pub target_function_id: [u8; 16],
162 pub target_operator_class_id: [u8; 16],
163 pub fingerprint: [u8; 32],
164 pub callback: Option<RadixAbiPlannerSupportFnV1>,
165}
166
167#[repr(C)]
168#[derive(Clone, Copy)]
169pub struct RadixPluginDescriptorV1 {
170 pub header: RadixAbiHeaderV1,
171 pub package_id: [u8; 16],
172 pub package_name: RadixAbiStringV1,
173 pub package_version: RadixAbiStringV1,
174 pub abi_min_minor: u16,
175 pub abi_max_minor: u16,
176 pub reserved: u32,
177 pub descriptor_fingerprint: [u8; 32],
178 pub type_count: u32,
179 pub reserved_types: u32,
180 pub types: *const RadixAbiExternalTypeDescriptorV1,
181 pub function_count: u32,
182 pub reserved_functions: u32,
183 pub functions: *const RadixAbiScalarFunctionDescriptorV1,
184 pub operator_count: u32,
185 pub reserved_operators: u32,
186 pub operators: *const RadixAbiOperatorDescriptorV1,
187 pub operator_class_count: u32,
188 pub reserved_operator_classes: u32,
189 pub operator_classes: *const RadixAbiOperatorClassDescriptorV1,
190 pub planner_support_count: u32,
191 pub reserved_planner_support: u32,
192 pub planner_support: *const RadixAbiPlannerSupportDescriptorV1,
193}
194
195unsafe impl Sync for RadixAbiExternalTypeDescriptorV1 {}
201unsafe impl Sync for RadixAbiScalarFunctionDescriptorV1 {}
203unsafe impl Sync for RadixAbiOperatorDescriptorV1 {}
205unsafe impl Sync for RadixAbiOperatorClassDescriptorV1 {}
207unsafe impl Sync for RadixAbiPlannerSupportDescriptorV1 {}
209unsafe impl Sync for RadixPluginDescriptorV1 {}