snarkvm_synthesizer_program/logic/instruction/operand/
bytes.rs1use super::*;
17
18impl<N: Network> FromBytes for Operand<N> {
19 fn read_le<R: Read>(mut reader: R) -> IoResult<Self> {
20 match u8::read_le(&mut reader)? {
21 0 => Ok(Self::Literal(Literal::read_le(&mut reader)?)),
22 1 => Ok(Self::Register(Register::read_le(&mut reader)?)),
23 2 => Ok(Self::ProgramID(ProgramID::read_le(&mut reader)?)),
24 3 => Ok(Self::Signer),
25 4 => Ok(Self::Caller),
26 5 => Ok(Self::BlockHeight),
27 6 => Ok(Self::NetworkID),
28 7 => {
29 let program_id = match u8::read_le(&mut reader)? {
31 0 => None,
32 1 => Some(ProgramID::read_le(&mut reader)?),
33 variant => return Err(error(format!("Invalid program ID variant '{variant}' for the checksum"))),
34 };
35 Ok(Self::Checksum(program_id))
36 }
37 8 => {
38 let program_id = match u8::read_le(&mut reader)? {
40 0 => None,
41 1 => Some(ProgramID::read_le(&mut reader)?),
42 variant => return Err(error(format!("Invalid program ID variant '{variant}' for the edition"))),
43 };
44 Ok(Self::Edition(program_id))
45 }
46 9 => {
47 let program_id = match u8::read_le(&mut reader)? {
49 0 => None,
50 1 => Some(ProgramID::read_le(&mut reader)?),
51 variant => return Err(error(format!("Invalid program ID variant '{variant}' for the owner"))),
52 };
53 Ok(Self::ProgramOwner(program_id))
54 }
55 variant => Err(error(format!("Failed to deserialize operand variant {variant}"))),
56 }
57 }
58}
59
60impl<N: Network> ToBytes for Operand<N> {
61 fn write_le<W: Write>(&self, mut writer: W) -> IoResult<()> {
62 match self {
63 Self::Literal(literal) => {
64 0u8.write_le(&mut writer)?;
65 literal.write_le(&mut writer)
66 }
67 Self::Register(register) => {
68 1u8.write_le(&mut writer)?;
69 register.write_le(&mut writer)
70 }
71 Self::ProgramID(program_id) => {
72 2u8.write_le(&mut writer)?;
73 program_id.write_le(&mut writer)
74 }
75 Self::Signer => 3u8.write_le(&mut writer),
76 Self::Caller => 4u8.write_le(&mut writer),
77 Self::BlockHeight => 5u8.write_le(&mut writer),
78 Self::NetworkID => 6u8.write_le(&mut writer),
79 Self::Checksum(program_id) => {
80 7u8.write_le(&mut writer)?;
81 match program_id {
83 None => 0u8.write_le(&mut writer),
84 Some(program_id) => {
85 1u8.write_le(&mut writer)?;
86 program_id.write_le(&mut writer)
87 }
88 }
89 }
90 Self::Edition(program_id) => {
91 8u8.write_le(&mut writer)?;
92 match program_id {
94 None => 0u8.write_le(&mut writer),
95 Some(program_id) => {
96 1u8.write_le(&mut writer)?;
97 program_id.write_le(&mut writer)
98 }
99 }
100 }
101 Self::ProgramOwner(program_id) => {
102 9u8.write_le(&mut writer)?;
103 match program_id {
105 None => 0u8.write_le(&mut writer),
106 Some(program_id) => {
107 1u8.write_le(&mut writer)?;
108 program_id.write_le(&mut writer)
109 }
110 }
111 }
112 }
113 }
114}