cs_mwc_bch/messages/
node_addr_ex.rs1use byteorder::{LittleEndian, ReadBytesExt, WriteBytesExt};
2use messages::node_addr::NodeAddr;
3use std::io;
4use std::io::{Read, Write};
5use util::{Result, Serializable};
6
7#[derive(Debug, Default, PartialEq, Eq, Hash, Clone)]
9pub struct NodeAddrEx {
10 pub last_connected_time: u32,
12 pub addr: NodeAddr,
14}
15
16impl NodeAddrEx {
17 pub const SIZE: usize = NodeAddr::SIZE + 4;
19
20 pub fn size(&self) -> usize {
22 NodeAddrEx::SIZE
23 }
24}
25
26impl Serializable<NodeAddrEx> for NodeAddrEx {
27 fn read(reader: &mut dyn Read) -> Result<NodeAddrEx> {
28 Ok(NodeAddrEx {
29 last_connected_time: reader.read_u32::<LittleEndian>()?,
30 addr: NodeAddr::read(reader)?,
31 })
32 }
33
34 fn write(&self, writer: &mut dyn Write) -> io::Result<()> {
35 writer.write_u32::<LittleEndian>(self.last_connected_time)?;
36 self.addr.write(writer)?;
37 Ok(())
38 }
39}
40
41#[cfg(test)]
42mod tests {
43 use super::*;
44 use std::io::Cursor;
45 use std::net::Ipv6Addr;
46
47 #[test]
48 fn write_read() {
49 let mut v = Vec::new();
50 let a = NodeAddrEx {
51 last_connected_time: 12345,
52 addr: NodeAddr {
53 services: 1,
54 ip: Ipv6Addr::from([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]),
55 port: 123,
56 },
57 };
58 a.write(&mut v).unwrap();
59 assert!(v.len() == a.size());
60 assert!(NodeAddrEx::read(&mut Cursor::new(&v)).unwrap() == a);
61 }
62}