Skip to main content

crabka_protocol/
arbitrary_impls.rs

1#![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}