tokio_listener/
tonic012.rs1use tonic_012::transport::server::{Connected, TcpConnectInfo};
2
3#[cfg(all(feature = "unix", unix))]
4use tonic_012::transport::server::UdsConnectInfo;
5
6#[cfg(all(any(target_os = "linux", target_os = "android", target_os = "macos"), feature = "vsock"))]
7use tokio_vsock::VsockConnectInfo;
8
9use crate::Connection;
10
11#[non_exhaustive]
12#[derive(Clone)]
13pub enum ListenerConnectInfo {
14 Tcp(TcpConnectInfo),
15 #[cfg(all(feature = "unix", unix))]
16 #[cfg_attr(docsrs_alt, doc(cfg(all(feature = "unix", unix))))]
17 Unix(UdsConnectInfo),
18 #[cfg(feature = "inetd")]
19 #[cfg_attr(docsrs_alt, doc(cfg(feature = "inetd")))]
20 Stdio,
21 #[cfg(all(any(target_os = "linux", target_os = "android", target_os = "macos"), feature = "vsock"))]
22 Vsock(VsockConnectInfo),
23 Other,
24}
25
26impl Connected for Connection {
27 type ConnectInfo = ListenerConnectInfo;
28
29 fn connect_info(&self) -> Self::ConnectInfo {
30 if let Some(tcp_stream) = self.try_borrow_tcp() {
31 return ListenerConnectInfo::Tcp(tcp_stream.connect_info());
32 }
33 #[cfg(all(feature = "unix", unix))]
34 if let Some(unix_stream) = self.try_borrow_unix() {
35 return ListenerConnectInfo::Unix(unix_stream.connect_info());
36 }
37 #[cfg(all(any(target_os = "linux", target_os = "android", target_os = "macos"), feature = "vsock"))]
38 if let Some(vsock_stream) = self.try_borrow_vsock() {
39 return ListenerConnectInfo::Vsock(vsock_stream.connect_info());
40 }
41 #[cfg(feature = "inetd")]
42 if self.try_borrow_stdio().is_some() {
43 return ListenerConnectInfo::Stdio;
44 }
45
46 ListenerConnectInfo::Other
47 }
48}