xref: /tonic/tonic/src/transport/server/unix.rs (revision 7380454c)
1 use super::Connected;
2 use std::sync::Arc;
3 
4 /// Connection info for Unix domain socket streams.
5 ///
6 /// This type will be accessible through [request extensions][ext] if you're using
7 /// a unix stream.
8 ///
9 /// See [Connected] for more details.
10 ///
11 /// [ext]: crate::Request::extensions
12 #[derive(Clone, Debug)]
13 pub struct UdsConnectInfo {
14     /// Peer address. This will be "unnamed" for client unix sockets.
15     pub peer_addr: Option<Arc<tokio::net::unix::SocketAddr>>,
16     /// Process credentials for the unix socket.
17     pub peer_cred: Option<tokio::net::unix::UCred>,
18 }
19 
20 impl Connected for tokio::net::UnixStream {
21     type ConnectInfo = UdsConnectInfo;
22 
connect_info(&self) -> Self::ConnectInfo23     fn connect_info(&self) -> Self::ConnectInfo {
24         UdsConnectInfo {
25             peer_addr: self.peer_addr().ok().map(Arc::new),
26             peer_cred: self.peer_cred().ok(),
27         }
28     }
29 }
30