tokio_listener/
tonic012.rs

1use 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}