bytes.rs
1 // Copyright (c) 2019-2025 Alpha-Delta Network Inc. 2 // This file is part of the alphavm library. 3 4 // Licensed under the Apache License, Version 2.0 (the "License"); 5 // you may not use this file except in compliance with the License. 6 // You may obtain a copy of the License at: 7 8 // http://www.apache.org/licenses/LICENSE-2.0 9 10 // Unless required by applicable law or agreed to in writing, software 11 // distributed under the License is distributed on an "AS IS" BASIS, 12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 // See the License for the specific language governing permissions and 14 // limitations under the License. 15 16 use super::*; 17 18 impl<N: Network> FromBytes for ConfirmedTxType<N> { 19 /// Reads the confirmed transaction type from the buffer. 20 fn read_le<R: Read>(mut reader: R) -> IoResult<Self> { 21 // Read the variant. 22 let variant = u8::read_le(&mut reader)?; 23 // Match the variant. 24 match variant { 25 0 => Ok(Self::AcceptedDeploy(u32::read_le(&mut reader)?)), 26 1 => Ok(Self::AcceptedExecute(u32::read_le(&mut reader)?)), 27 2 => Ok(Self::RejectedDeploy(u32::read_le(&mut reader)?, Rejected::read_le(&mut reader)?)), 28 3 => Ok(Self::RejectedExecute(u32::read_le(&mut reader)?, Rejected::read_le(&mut reader)?)), 29 4.. => Err(error("Invalid confirmed transaction type variant")), 30 } 31 } 32 } 33 34 impl<N: Network> ToBytes for ConfirmedTxType<N> { 35 /// Writes the confirmed transaction type to the buffer. 36 fn write_le<W: Write>(&self, mut writer: W) -> IoResult<()> { 37 // Write the confirmed transaction type. 38 match self { 39 Self::AcceptedDeploy(index) => { 40 // Write the variant. 41 0u8.write_le(&mut writer)?; 42 // Write the index. 43 index.write_le(&mut writer) 44 } 45 Self::AcceptedExecute(index) => { 46 // Write the variant. 47 1u8.write_le(&mut writer)?; 48 // Write the index. 49 index.write_le(&mut writer) 50 } 51 Self::RejectedDeploy(index, rejected) => { 52 // Write the variant. 53 2u8.write_le(&mut writer)?; 54 // Write the index. 55 index.write_le(&mut writer)?; 56 // Write the rejected transaction. 57 rejected.write_le(&mut writer) 58 } 59 Self::RejectedExecute(index, rejected) => { 60 // Write the variant. 61 3u8.write_le(&mut writer)?; 62 // Write the index. 63 index.write_le(&mut writer)?; 64 // Write the rejected transaction. 65 rejected.write_le(&mut writer) 66 } 67 } 68 } 69 } 70 71 #[cfg(test)] 72 mod tests { 73 use super::*; 74 75 #[test] 76 fn test_bytes() { 77 for expected in crate::confirmed_tx_type::test_helpers::sample_confirmed_tx_types() { 78 // Check the byte representation. 79 let expected_bytes = expected.to_bytes_le().unwrap(); 80 assert_eq!(expected, ConfirmedTxType::read_le(&expected_bytes[..]).unwrap()); 81 } 82 } 83 }