intent_transfer/bridge/
be.rs

1use anchor_lang::{AnchorDeserialize, AnchorSerialize};
2
3#[derive(PartialEq, Debug)]
4pub struct U16BE(pub u16);
5
6impl AnchorDeserialize for U16BE {
7    fn deserialize_reader<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
8        let mut buf = [0u8; 2];
9        reader.read_exact(&mut buf)?;
10        Ok(U16BE(u16::from_be_bytes(buf)))
11    }
12}
13
14impl AnchorSerialize for U16BE {
15    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
16        writer.write_all(&self.0.to_be_bytes())
17    }
18}
19
20impl From<U16BE> for u128 {
21    fn from(value: U16BE) -> u128 {
22        u128::from(value.0)
23    }
24}
25
26#[derive(PartialEq, Debug)]
27pub struct U64BE(pub u64);
28
29impl AnchorDeserialize for U64BE {
30    fn deserialize_reader<R: std::io::Read>(reader: &mut R) -> std::io::Result<Self> {
31        let mut buf = [0u8; 8];
32        reader.read_exact(&mut buf)?;
33        Ok(U64BE(u64::from_be_bytes(buf)))
34    }
35}
36
37impl AnchorSerialize for U64BE {
38    fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
39        writer.write_all(&self.0.to_be_bytes())
40    }
41}
42
43impl From<U64BE> for u128 {
44    fn from(value: U64BE) -> u128 {
45        u128::from(value.0)
46    }
47}
48
49#[cfg(test)]
50mod tests {
51    use super::*;
52
53    #[test]
54    fn test_serialize_u16be() {
55        let orig = U16BE(1);
56
57        let serialized = orig.try_to_vec().unwrap();
58        assert_eq!(serialized, vec![0, 1]);
59
60        let deserialized = U16BE::try_from_slice(&serialized).unwrap();
61        assert_eq!(orig, deserialized);
62    }
63
64    #[test]
65    fn test_serialize_u64be() {
66        let orig = U64BE(1);
67
68        let serialized = orig.try_to_vec().unwrap();
69        assert_eq!(serialized, vec![0, 0, 0, 0, 0, 0, 0, 1]);
70
71        let deserialized = U64BE::try_from_slice(&serialized).unwrap();
72        assert_eq!(orig, deserialized);
73    }
74}