Skip to main content

actix_telepathy/remote/addr/
node.rs

1use std::hash::{Hash, Hasher};
2use std::net::SocketAddr;
3
4use actix::Addr;
5use serde::{Deserialize, Serialize};
6
7use crate::{AddrRepresentation, NetworkInterface, RemoteAddr};
8
9#[derive(Deserialize, Serialize, Debug)]
10pub struct Node {
11    pub socket_addr: SocketAddr,
12    #[serde(skip_serializing)]
13    #[serde(skip_deserializing)]
14    pub network_interface: Option<Addr<NetworkInterface>>,
15}
16
17impl Node {
18    pub fn new(socket_addr: SocketAddr, network_interface: Option<Addr<NetworkInterface>>) -> Self {
19        Self {
20            socket_addr,
21            network_interface,
22        }
23    }
24
25    pub fn get_remote_addr(&self, id: String) -> RemoteAddr {
26        RemoteAddr {
27            node: self.clone(),
28            id: AddrRepresentation::Key(id),
29        }
30    }
31}
32
33impl Default for Node {
34    fn default() -> Self {
35        Node {
36            socket_addr: "0.1.2.3:8080".parse().unwrap(),
37            network_interface: None,
38        }
39    }
40}
41
42impl Clone for Node {
43    fn clone(&self) -> Self {
44        Node::new(self.socket_addr, self.network_interface.clone())
45    }
46}
47
48impl PartialEq for Node {
49    fn eq(&self, other: &Self) -> bool {
50        self.socket_addr.eq(&other.socket_addr)
51    }
52}
53
54impl Eq for Node {}
55
56impl Hash for Node {
57    fn hash<H: Hasher>(&self, state: &mut H) {
58        self.socket_addr.hash(state);
59    }
60}