virtual_file_system/socket/
address.rs

1use file_system::PathOwned;
2
3use network::{IP, IPv4, IPv6, Port};
4
5#[derive(Debug, Clone, PartialEq, Eq)]
6pub enum SockerAddress {
7    IPv4(IPv4, Port),
8    IPv6(IPv6, Port),
9    Local(PathOwned),
10}
11
12impl SockerAddress {
13    pub fn into_ip_and_port(self) -> Option<(IP, Port)> {
14        match self {
15            Self::IPv4(ip, port) => Some((ip.into(), port)),
16            Self::IPv6(ip, port) => Some((ip.into(), port)),
17            _ => None,
18        }
19    }
20
21    pub const fn from_ip_and_port(ip: IP, port: Port) -> Self {
22        match ip {
23            IP::IPv4(ip) => Self::IPv4(ip, port),
24            IP::IPv6(ip) => Self::IPv6(ip, port),
25        }
26    }
27}
28
29impl From<(IPv4, Port)> for SockerAddress {
30    fn from((ip, port): (IPv4, Port)) -> Self {
31        Self::IPv4(ip, port)
32    }
33}
34
35impl From<(IPv6, Port)> for SockerAddress {
36    fn from((ip, port): (IPv6, Port)) -> Self {
37        Self::IPv6(ip, port)
38    }
39}
40
41impl From<PathOwned> for SockerAddress {
42    fn from(path: PathOwned) -> Self {
43        Self::Local(path)
44    }
45}