actix_telepathy/remote/addr/
node.rs1use 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}