snarkvm_console_program/data/access/
bytes.rs1use super::*;
17
18impl<N: Network> FromBytes for Access<N> {
19 fn read_le<R: Read>(mut reader: R) -> IoResult<Self> {
21 let variant = u8::read_le(&mut reader)?;
22 match variant {
23 0 => Ok(Self::Member(Identifier::read_le(&mut reader)?)),
24 1 => Ok(Self::Index(U32::read_le(&mut reader)?)),
25 2.. => Err(error(format!("Failed to deserialize access variant {variant}"))),
26 }
27 }
28}
29
30impl<N: Network> ToBytes for Access<N> {
31 fn write_le<W: Write>(&self, mut writer: W) -> IoResult<()> {
33 match self {
34 Access::Member(identifier) => {
35 0u8.write_le(&mut writer)?;
36 identifier.write_le(&mut writer)
37 }
38 Access::Index(index) => {
39 1u8.write_le(&mut writer)?;
40 index.write_le(&mut writer)
41 }
42 }
43 }
44}
45
46#[cfg(test)]
47mod tests {
48 use super::*;
49 use crate::data::identifier::tests::sample_identifier;
50 use snarkvm_console_network::MainnetV0;
51
52 type CurrentNetwork = MainnetV0;
53
54 const ITERATIONS: u32 = 1000;
55
56 fn check_bytes(expected: Access<CurrentNetwork>) -> Result<()> {
57 let expected_bytes = expected.to_bytes_le()?;
59 assert_eq!(expected, Access::read_le(&expected_bytes[..])?);
60 Ok(())
61 }
62
63 #[test]
64 fn test_bytes() -> Result<()> {
65 let rng = &mut TestRng::default();
66
67 for _ in 0..ITERATIONS {
68 let identifier = sample_identifier(rng)?;
70 check_bytes(Access::Member(identifier))?;
71
72 let index = U32::<CurrentNetwork>::rand(rng);
74 check_bytes(Access::Index(index))?;
75 }
76 Ok(())
77 }
78}