• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 /// [Connected]: crate::transport::server::Connected
13 #[cfg_attr(docsrs, doc(cfg(unix)))]
14 #[derive(Clone, Debug)]
15 pub struct UdsConnectInfo {
16     /// Peer address. This will be "unnamed" for client unix sockets.
17     pub peer_addr: Option<Arc<tokio::net::unix::SocketAddr>>,
18     /// Process credentials for the unix socket.
19     pub peer_cred: Option<tokio::net::unix::UCred>,
20 }
21 
22 impl Connected for tokio::net::UnixStream {
23     type ConnectInfo = UdsConnectInfo;
24 
connect_info(&self) -> Self::ConnectInfo25     fn connect_info(&self) -> Self::ConnectInfo {
26         UdsConnectInfo {
27             peer_addr: self.peer_addr().ok().map(Arc::new),
28             peer_cred: self.peer_cred().ok(),
29         }
30     }
31 }
32