intent_transfer/bridge/
be.rs1use 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}