tokio_listener/
some_socket_addr.rs1#[allow(unused_imports)]
2use std::{fmt::Display, net::SocketAddr, sync::Arc};
3
4#[derive(Debug)]
7#[non_exhaustive]
8#[allow(missing_docs)]
9pub enum SomeSocketAddr {
10 Tcp(SocketAddr),
11 #[cfg(all(feature = "unix", unix))]
12 #[cfg_attr(docsrs_alt, doc(cfg(all(feature = "unix", unix))))]
13 Unix(tokio::net::unix::SocketAddr),
14 #[cfg(feature = "inetd")]
15 #[cfg_attr(docsrs_alt, doc(cfg(feature = "inetd")))]
16 Stdio,
17 #[cfg(feature = "multi-listener")]
18 #[cfg_attr(docsrs_alt, doc(cfg(feature = "multi-listener")))]
19 Multiple,
20}
21
22impl Display for SomeSocketAddr {
23 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
24 match self {
25 SomeSocketAddr::Tcp(x) => x.fmt(f),
26 #[cfg(all(feature = "unix", unix))]
27 SomeSocketAddr::Unix(_x) => "unix".fmt(f),
28 #[cfg(feature = "inetd")]
29 SomeSocketAddr::Stdio => "stdio".fmt(f),
30 #[cfg(feature = "multi-listener")]
31 SomeSocketAddr::Multiple => "multiple".fmt(f),
32 }
33 }
34}
35
36impl SomeSocketAddr {
37 #[must_use]
40 pub fn clonable(self) -> SomeSocketAddrClonable {
41 match self {
42 SomeSocketAddr::Tcp(x) => SomeSocketAddrClonable::Tcp(x),
43 #[cfg(all(feature = "unix", unix))]
44 SomeSocketAddr::Unix(x) => SomeSocketAddrClonable::Unix(Arc::new(x)),
45 #[cfg(feature = "inetd")]
46 SomeSocketAddr::Stdio => SomeSocketAddrClonable::Stdio,
47 #[cfg(feature = "multi-listener")]
48 SomeSocketAddr::Multiple => SomeSocketAddrClonable::Multiple,
49 }
50 }
51}
52
53#[derive(Debug, Clone)]
55#[non_exhaustive]
56#[allow(missing_docs)]
57pub enum SomeSocketAddrClonable {
58 Tcp(SocketAddr),
59 #[cfg(all(feature = "unix", unix))]
60 #[cfg_attr(docsrs_alt, doc(cfg(all(feature = "unix", unix))))]
61 Unix(Arc<tokio::net::unix::SocketAddr>),
62 #[cfg(feature = "inetd")]
63 #[cfg_attr(docsrs_alt, doc(cfg(feature = "inetd")))]
64 Stdio,
65 #[cfg(feature = "multi-listener")]
66 #[cfg_attr(docsrs_alt, doc(cfg(feature = "multi-listener")))]
67 Multiple,
68}
69
70impl Display for SomeSocketAddrClonable {
71 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
72 match self {
73 SomeSocketAddrClonable::Tcp(x) => x.fmt(f),
74 #[cfg(all(feature = "unix", unix))]
75 SomeSocketAddrClonable::Unix(x) => write!(f, "unix:{x:?}"),
76 #[cfg(feature = "inetd")]
77 SomeSocketAddrClonable::Stdio => "stdio".fmt(f),
78 #[cfg(feature = "multi-listener")]
79 SomeSocketAddrClonable::Multiple => "multiple".fmt(f),
80 }
81 }
82}
83
84impl From<SomeSocketAddr> for SomeSocketAddrClonable {
85 fn from(value: SomeSocketAddr) -> Self {
86 value.clonable()
87 }
88}