crabka_protocol/
arbitrary_impls.rs1#![cfg(feature = "arbitrary")]
2
3use arbitrary::{Arbitrary, Unstructured};
4
5use crate::UnknownTaggedFields;
6use crate::owned::api_versions_request::ApiVersionsRequest;
7use crate::owned::api_versions_response::{ApiVersion, ApiVersionsResponse};
8
9fn ascii(u: &mut Unstructured, min: usize, max: usize) -> arbitrary::Result<String> {
10 let len = u.int_in_range(min..=max)?;
11 let mut s = String::with_capacity(len);
12 for _ in 0..len {
13 let c: u8 = u.int_in_range(0x20..=0x7E)?;
14 s.push(c as char);
15 }
16 Ok(s)
17}
18
19impl<'a> Arbitrary<'a> for ApiVersionsRequest {
20 fn arbitrary(u: &mut Unstructured<'a>) -> arbitrary::Result<Self> {
21 Ok(Self {
22 client_software_name: ascii(u, 0, 32)?,
23 client_software_version: ascii(u, 0, 32)?,
24 unknown_tagged_fields: UnknownTaggedFields::default(),
25 })
26 }
27}
28
29impl<'a> Arbitrary<'a> for ApiVersion {
30 fn arbitrary(u: &mut Unstructured<'a>) -> arbitrary::Result<Self> {
31 Ok(Self {
32 api_key: u.arbitrary()?,
33 min_version: u.arbitrary()?,
34 max_version: u.arbitrary()?,
35 unknown_tagged_fields: UnknownTaggedFields::default(),
36 })
37 }
38}
39
40impl<'a> Arbitrary<'a> for ApiVersionsResponse {
41 fn arbitrary(u: &mut Unstructured<'a>) -> arbitrary::Result<Self> {
42 let n = u.int_in_range(0..=8usize)?;
43 let mut api_keys = Vec::with_capacity(n);
44 for _ in 0..n {
45 api_keys.push(ApiVersion::arbitrary(u)?);
46 }
47 Ok(Self {
48 error_code: u.arbitrary()?,
49 api_keys,
50 throttle_time_ms: u.arbitrary()?,
51 supported_features: Vec::new(),
52 finalized_features_epoch: 0,
53 finalized_features: Vec::new(),
54 zk_migration_ready: false,
55 unknown_tagged_fields: UnknownTaggedFields::default(),
56 })
57 }
58}