1macro_rules! corpus {
6 ($($name:literal),+ $(,)?) => {
7 pub const ALL: &[(&str, &[u8])] = &[
9 $(($name, include_bytes!(concat!("../fixtures/", $name)))),+
10 ];
11 };
12}
13
14corpus!(
15 "accepted_operation.json",
19 "agent_body_ref.bin",
20 "agent_card.bin",
21 "agent_chunk.bin",
22 "agent_chunk_open.bin",
23 "agent_chunk_terminal.bin",
24 "agent_command.bin",
25 "agent_command_signed.bin",
26 "agent_dead_letter.bin",
27 "agent_error.bin",
28 "agent_error_body.bin",
29 "agent_event.bin",
30 "agent_invalid_chunk_late_deadline.bin",
31 "agent_invalid_chunk_no_sequence.bin",
32 "agent_invalid_chunk_open_no_operation.bin",
33 "agent_invalid_command_no_correlation.bin",
34 "agent_invalid_error_last.bin",
35 "agent_invalid_event_task_state.bin",
36 "agent_invalid_response_channel.bin",
37 "agent_invalid_status_bad_operation.bin",
38 "agent_invalid_status_no_operation.bin",
39 "agent_must_understand.bin",
40 "agent_presence.bin",
41 "agent_record.bin",
42 "agent_response.bin",
43 "agent_session_end.bin",
44 "agent_session_parking.bin",
45 "agent_session_start.bin",
46 "agent_session_status.bin",
47 "agent_session_transition.bin",
48 "session_get.bin",
49 "session_list.bin",
50 "session_events.bin",
51 "session_state.bin",
52 "session_links.bin",
53 "session_sources.bin",
54 "session_sources_lane_only.bin",
55 "session_changes.bin",
56 "session_link_surface.bin",
57 "session_link_relation.bin",
58 "session_heartbeat.bin",
59 "session_reply_info.bin",
60 "session_reply_page.bin",
61 "session_reply_page_rebuilding.bin",
62 "session_reply_events.bin",
63 "session_reply_state.bin",
64 "session_reply_links.bin",
65 "session_reply_sources.bin",
66 "session_reply_changes.bin",
67 "session_reply_error.bin",
68 "session_http_info.json",
69 "session_http_page.json",
70 "session_http_page_rebuilding.json",
71 "session_http_events.json",
72 "session_http_state.json",
73 "session_http_links.json",
74 "session_http_sources.json",
75 "session_http_error.json",
76 "session_http_changes_start_new.json",
77 "session_http_changes_start.json",
78 "session_http_changes_legacy.json",
79 "session_http_changes_page.json",
80 "session_http_changes_no_retained_rows.json",
81 "session_http_changes_gap.json",
82 "session_http_changes_empty.json",
83 "session_http_changes_truncated.json",
84 "session_http_changes_origins.json",
85 "agent_signature.bin",
86 "agent_status_card.bin",
87 "agent_status_session.bin",
88 "agent_status_task.bin",
89 "agent_usage_cost.bin",
90 "authz_bind_roles.bin",
91 "authz_get_role_reply.bin",
92 "authz_history_reply.bin",
93 "authz_history_request.bin",
94 "authz_role.bin",
95 "authz_whoami_reply.bin",
96 "arrow_ipc_metadata.bin",
97 "arrow_ipc_policy.bin",
98 "backend_announce.bin",
99 "backend_announce_topology.bin",
100 "backend_announce_unavailable.bin",
101 "batch_reply.bin",
102 "batch_request.bin",
103 "browse_projections.json",
104 "browse_reply_decoded.bin",
105 "browse_reply_projections.bin",
106 "browse_reply_schema_registered.bin",
107 "browse_reply_schemas.bin",
108 "browse_schemas.json",
109 "capabilities.json",
110 "change_record.bin",
111 "checkpoint_mutation_replicated.bin",
112 "checkpoint_public_mutation_discriminants.bin",
113 "checkpoint_reply_destination.bin",
114 "checkpoint_reply_query_route.bin",
115 "checkpoint_request_public.bin",
116 "client_metadata_list.bin",
117 "client_metadata_query.bin",
118 "producer_presence.bin",
119 "context_manifest.bin",
120 "context_compaction.bin",
121 "context_retrieval.bin",
122 "control_apply_binding.bin",
123 "control_filter_catalog.bin",
124 "control_drop_schema.bin",
125 "control_register_projection.bin",
126 "control_register_schema_avro.bin",
127 "control_register_schema_json.bin",
128 "control_register_schema_protobuf.bin",
129 "control_accept_gap.bin",
130 "control_skip_record.bin",
131 "control_stamped_remove_binding.bin",
132 "control_register_session_source_all.bin",
133 "control_register_session_source_named.bin",
134 "control_remove_binding.bin",
135 "control_remove_session_source.bin",
136 "decode_record.bin",
137 "data_stack_string_discriminants.bin",
138 "destination_checkpoint_status.bin",
139 "destination_issue.json",
140 "destination_page.json",
141 "error_body.json",
142 "fold_snapshot.bin",
143 "filter_catalog_reply_bound.bin",
144 "filter_catalog_reply_configured.bin",
145 "filter_catalog_reply_registered.bin",
146 "filter_ack.bin",
147 "filter_ack_unfiltered.bin",
148 "filter_reply_acknowledged.bin",
149 "filter_consumer_filter.bin",
150 "filter_consumer_filter.json",
151 "filter_eval_cases.json",
152 "dispatch_cases.json",
153 "filter_codec_cases.json",
154 "header_block_envelope.json",
155 "header_block_generic.json",
156 "filter_mutation_register.bin",
157 "filter_mutation_register.json",
158 "filter_mutation_unbind_exact.bin",
159 "filter_mutation_unbind_exact.json",
160 "filter_poll_request.bin",
161 "filter_poll_request_group_id.bin",
162 "filter_reply_revision_disabled.bin",
163 "filter_mutation_revision_state.bin",
164 "filter_mutation_revision_state.json",
165 "filter_catalog_reply_revision_state.bin",
166 "filter_catalog_reply_revisions.bin",
167 "filter_catalog_reply_unbound.bin",
168 "filter_mutation_configure_group.bin",
169 "filter_mutation_configure_group.json",
170 "filter_poll_request_group_auto.bin",
171 "filter_reply_error.bin",
172 "filter_reply_page.bin",
173 "filter_reply_page_unfiltered.bin",
174 "filter_validation.json",
175 "fork_create.bin",
176 "fork_info.json",
177 "fork_put.bin",
178 "fork_reply_created.bin",
179 "forwarded_command.bin",
180 "forwarded_command_positioned.bin",
181 "forwarded_command_scoped.bin",
182 "forwarded_query.bin",
183 "forwarded_query_scoped.bin",
184 "graph_edge.bin",
185 "graph_edge_conversation.bin",
186 "graph_edge_producer.bin",
187 "graph_edge_sourced.bin",
188 "graph_neighbors.bin",
189 "graph_neighbors_conversation.bin",
190 "graph_node.bin",
191 "graph_node_conversation.bin",
192 "graph_node_producer.bin",
193 "graph_node_sourced.bin",
194 "graph_query.bin",
195 "graph_query_conversation.bin",
196 "graph_reply.bin",
197 "graph_upsert.bin",
198 "graph_upsert_session.bin",
199 "hello_reply.bin",
200 "hello_reply_agent.bin",
201 "hello_reply_features.bin",
202 "kv_cas.bin",
203 "kv_cas_session.bin",
204 "kv_cas_fenced.bin",
205 "kv_delete_session.bin",
206 "kv_copy.bin",
207 "kv_get_barriered.bin",
208 "kv_lease.bin",
209 "kv_lease_renew.bin",
210 "kv_move.bin",
211 "kv_namespaces.bin",
212 "kv_entry_memory_scope.bin",
213 "kv_page_view.json",
214 "kv_patch_session.bin",
215 "kv_release.bin",
216 "kv_reply_committed.bin",
217 "kv_reply_leased.bin",
218 "kv_reply_namespaces.bin",
219 "kv_reply_page.bin",
220 "kv_reply_renewed.bin",
221 "kv_reply_stale.bin",
222 "kv_reply_version_conflict.bin",
223 "kv_scan.bin",
224 "kv_set.bin",
225 "kv_set_session.bin",
226 "key_record.bin",
227 "logical_schema.bin",
228 "logical_type_discriminants.bin",
229 "managed_read.bin",
230 "managed_reply.bin",
231 "managed_request.bin",
232 "materialization_destination.bin",
233 "memory_feedback_scoped.bin",
234 "memory_forget_scoped.bin",
235 "memory_item_origin.bin",
236 "mutation_command.bin",
237 "mutation_command_scoped.bin",
238 "query_envelope.bin",
239 "query_envelope_aggregate.bin",
240 "query_envelope_raw_sql.bin",
241 "query_envelope_read_your_writes.bin",
242 "query_envelope_text.bin",
243 "query_error_discriminants.bin",
244 "query_cancel.bin",
245 "query_page.bin",
246 "query_reply_err_stale.bin",
247 "query_reply_err_too_large.bin",
248 "query_reply_ok.bin",
249 "query_execution.json",
250 "query_result.json",
251 "query_route.bin",
252 "query_route_page.json",
253 "query_status.bin",
254 "query_status_reply.bin",
255 "register_schema_managed.bin",
256 "schema_def.json",
257 "session_ref.bin",
258 "start_policy_discriminants.bin",
259 "state_delta.bin",
260 "state_snapshot.bin",
261 "snapshot_page.json",
262 "source_ref_generation.bin",
263 "token_estimates.json",
264 "table_file_page.json",
265 "table_metrics.json",
266 "table_schema_view.json",
267 "table_view.json",
268 "query_target_discriminants.bin",
269 "typed_value_discriminants.bin",
270);
271
272pub fn bytes(name: &str) -> Option<&'static [u8]> {
274 ALL.iter()
275 .find(|(fixture, _)| *fixture == name)
276 .map(|(_, bytes)| *bytes)
277}
278
279pub fn assert_matches(name: &str, encoded: &[u8]) {
282 let golden = bytes(name).unwrap_or_else(|| panic!("unknown fixture `{name}`"));
283 assert_eq!(
284 encoded, golden,
285 "fixture `{name}` drifted from the canonical frame"
286 );
287}
288
289pub const FILTER_CODEC_CASES: &str = include_str!("../fixtures/filter_codec_cases.json");
291
292#[cfg(test)]
293mod tests {
294 #[test]
295 fn given_the_corpus_when_looked_up_then_should_resolve_known_names() {
296 assert!(super::bytes("hello_reply.bin").is_some());
297 assert!(super::bytes("nope.bin").is_none());
298 }
299}