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_list_page.bin",
40 "agent_must_understand.bin",
41 "agent_presence.bin",
42 "agent_record.bin",
43 "agent_reply_error.bin",
44 "agent_reply_list_page.bin",
45 "agent_reply_status.bin",
46 "agent_response.bin",
47 "agent_submit.bin",
48 "agent_signature.bin",
49 "agent_status_card.bin",
50 "agent_status_run_metadata.bin",
51 "agent_status_task.bin",
52 "authz_bind_roles.bin",
53 "authz_get_role_reply.bin",
54 "authz_history_reply.bin",
55 "authz_history_request.bin",
56 "authz_role.bin",
57 "authz_whoami_reply.bin",
58 "arrow_ipc_metadata.bin",
59 "arrow_ipc_policy.bin",
60 "backend_announce.bin",
61 "backend_announce_topology.bin",
62 "backend_announce_unavailable.bin",
63 "batch_reply.bin",
64 "batch_request.bin",
65 "browse_projections.json",
66 "browse_reply_decoded.bin",
67 "browse_reply_projections.bin",
68 "browse_reply_schema_registered.bin",
69 "browse_reply_schemas.bin",
70 "browse_schemas.json",
71 "capabilities.json",
72 "change_record.bin",
73 "checkpoint_mutation_replicated.bin",
74 "checkpoint_public_mutation_discriminants.bin",
75 "checkpoint_reply_destination.bin",
76 "checkpoint_reply_query_route.bin",
77 "checkpoint_request_public.bin",
78 "client_metadata_list.bin",
79 "client_metadata_query.bin",
80 "producer_presence.bin",
81 "control_apply_binding.bin",
82 "control_filter_catalog.bin",
83 "control_drop_schema.bin",
84 "control_register_projection.bin",
85 "control_register_schema_avro.bin",
86 "control_register_schema_json.bin",
87 "control_register_schema_protobuf.bin",
88 "control_register_run_source.bin",
89 "control_remove_binding.bin",
90 "control_remove_run_source.bin",
91 "decode_record.bin",
92 "data_stack_string_discriminants.bin",
93 "destination_checkpoint_status.bin",
94 "destination_issue.json",
95 "destination_page.json",
96 "error_body.json",
97 "fold_snapshot.bin",
98 "filter_ack.bin",
99 "filter_ack_unfiltered.bin",
100 "filter_catalog_reply_bound.bin",
101 "filter_catalog_reply_configured.bin",
102 "filter_catalog_reply_registered.bin",
103 "filter_consumer_filter.bin",
104 "filter_consumer_filter.json",
105 "filter_eval_cases.json",
106 "filter_codec_cases.json",
107 "filter_mutation_register.bin",
108 "filter_mutation_register.json",
109 "filter_mutation_unbind_exact.bin",
110 "filter_mutation_unbind_exact.json",
111 "filter_poll_request.bin",
112 "filter_poll_request_group_id.bin",
113 "filter_reply_revision_disabled.bin",
114 "filter_mutation_revision_state.bin",
115 "filter_mutation_revision_state.json",
116 "filter_catalog_reply_revision_state.bin",
117 "filter_catalog_reply_revisions.bin",
118 "filter_catalog_reply_unbound.bin",
119 "filter_mutation_configure_group.bin",
120 "filter_mutation_configure_group.json",
121 "filter_poll_request_group_auto.bin",
122 "filter_reply_acknowledged.bin",
123 "filter_reply_error.bin",
124 "filter_reply_page.bin",
125 "filter_reply_page_unfiltered.bin",
126 "filter_validation.json",
127 "fork_create.bin",
128 "fork_info.json",
129 "fork_put.bin",
130 "fork_reply_created.bin",
131 "forwarded_command.bin",
132 "forwarded_query.bin",
133 "graph_edge.bin",
134 "graph_edge_conversation.bin",
135 "graph_edge_sourced.bin",
136 "graph_neighbors.bin",
137 "graph_neighbors_conversation.bin",
138 "graph_node.bin",
139 "graph_node_conversation.bin",
140 "graph_node_sourced.bin",
141 "graph_query.bin",
142 "graph_query_conversation.bin",
143 "graph_reply.bin",
144 "graph_upsert.bin",
145 "hello_reply.bin",
146 "hello_reply_agent.bin",
147 "hello_reply_features.bin",
148 "kv_cas.bin",
149 "kv_cas_fenced.bin",
150 "kv_copy.bin",
151 "kv_get_barriered.bin",
152 "kv_lease.bin",
153 "kv_lease_renew.bin",
154 "kv_move.bin",
155 "kv_namespaces.bin",
156 "kv_page_view.json",
157 "kv_release.bin",
158 "kv_reply_committed.bin",
159 "kv_reply_leased.bin",
160 "kv_reply_namespaces.bin",
161 "kv_reply_page.bin",
162 "kv_reply_renewed.bin",
163 "kv_reply_stale.bin",
164 "kv_reply_version_conflict.bin",
165 "kv_scan.bin",
166 "kv_set.bin",
167 "key_record.bin",
168 "logical_schema.bin",
169 "logical_type_discriminants.bin",
170 "managed_request.bin",
171 "materialization_destination.bin",
172 "mutation_command.bin",
173 "query_envelope.bin",
174 "query_envelope_aggregate.bin",
175 "query_envelope_raw_sql.bin",
176 "query_envelope_read_your_writes.bin",
177 "query_envelope_text.bin",
178 "query_error_discriminants.bin",
179 "query_cancel.bin",
180 "query_page.bin",
181 "query_reply_err_stale.bin",
182 "query_reply_err_too_large.bin",
183 "query_reply_ok.bin",
184 "query_execution.json",
185 "query_result.json",
186 "query_route.bin",
187 "query_route_page.json",
188 "query_status.bin",
189 "query_status_reply.bin",
190 "register_schema_managed.bin",
191 "schema_def.json",
192 "start_policy_discriminants.bin",
193 "snapshot_page.json",
194 "table_file_page.json",
195 "table_metrics.json",
196 "table_schema_view.json",
197 "table_view.json",
198 "query_target_discriminants.bin",
199 "typed_value_discriminants.bin",
200);
201
202pub fn bytes(name: &str) -> Option<&'static [u8]> {
204 ALL.iter()
205 .find(|(fixture, _)| *fixture == name)
206 .map(|(_, bytes)| *bytes)
207}
208
209pub fn assert_matches(name: &str, encoded: &[u8]) {
212 let golden = bytes(name).unwrap_or_else(|| panic!("unknown fixture `{name}`"));
213 assert_eq!(
214 encoded, golden,
215 "fixture `{name}` drifted from the canonical frame"
216 );
217}
218
219pub const FILTER_CODEC_CASES: &str = include_str!("../fixtures/filter_codec_cases.json");
221
222#[cfg(test)]
223mod tests {
224 #[test]
225 fn given_the_corpus_when_looked_up_then_should_resolve_known_names() {
226 assert!(super::bytes("hello_reply.bin").is_some());
227 assert!(super::bytes("nope.bin").is_none());
228 }
229}