wslplugins_rs/
wsl_session_information.rs1use crate::{HasSessionId, SessionID};
7use core::hash;
8use std::{fmt, os::windows::raw::HANDLE};
9use wslpluginapi_sys::windows_sys::Win32::Security::PSID;
10
11#[repr(transparent)]
16pub struct WSLSessionInformation(wslpluginapi_sys::WSLSessionInformation);
17
18impl WSLSessionInformation {
19 #[must_use]
24 #[inline]
25 pub const fn id(&self) -> SessionID {
26 SessionID(self.0.SessionId)
27 }
28
29 #[must_use]
37 #[inline]
38 pub const unsafe fn user_token(&self) -> HANDLE {
39 self.0.UserToken
40 }
41
42 #[must_use]
50 #[inline]
51 pub const unsafe fn user_sid(&self) -> PSID {
52 self.0.UserSid
53 }
54}
55
56impl HasSessionId for WSLSessionInformation {
57 #[inline]
58 fn session_id(&self) -> SessionID {
59 self.id()
60 }
61}
62
63impl From<wslpluginapi_sys::WSLSessionInformation> for WSLSessionInformation {
64 #[inline]
65 fn from(value: wslpluginapi_sys::WSLSessionInformation) -> Self {
66 Self(value)
67 }
68}
69
70impl From<WSLSessionInformation> for wslpluginapi_sys::WSLSessionInformation {
71 #[inline]
72 fn from(value: WSLSessionInformation) -> Self {
73 value.0
74 }
75}
76
77impl AsRef<WSLSessionInformation> for wslpluginapi_sys::WSLSessionInformation {
78 #[inline]
79 fn as_ref(&self) -> &WSLSessionInformation {
80 unsafe { &*std::ptr::from_ref::<Self>(self).cast::<WSLSessionInformation>() }
82 }
83}
84
85impl AsRef<wslpluginapi_sys::WSLSessionInformation> for WSLSessionInformation {
86 #[inline]
87 fn as_ref(&self) -> &wslpluginapi_sys::WSLSessionInformation {
88 &self.0
89 }
90}
91
92impl hash::Hash for WSLSessionInformation {
93 #[inline]
98 fn hash<H: hash::Hasher>(&self, state: &mut H) {
99 self.0.SessionId.hash(state);
100 }
101}
102
103impl PartialEq for WSLSessionInformation {
104 #[inline]
112 fn eq(&self, other: &Self) -> bool {
113 self.0.SessionId == other.0.SessionId
114 }
115}
116
117impl fmt::Debug for WSLSessionInformation {
119 #[inline]
123 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
124 f.debug_struct("WSLSessionInformation")
125 .field("sessionId", &self.0.SessionId)
126 .field("userToken", &self.0.UserToken)
127 .field("userSid", &self.0.UserSid)
128 .finish()
129 }
130}
131
132#[cfg(test)]
133mod tests {
134 use crate::utils::test_transparence;
135
136 use super::WSLSessionInformation;
137
138 #[test]
139 fn test_layouts() {
140 test_transparence::<wslpluginapi_sys::WSLSessionInformation, WSLSessionInformation>();
141 }
142}