use crate::SessionID;
use core::hash;
use std::{fmt, os::windows::raw::HANDLE};
use wslpluginapi_sys::windows_sys::Win32::Security::PSID;
#[repr(transparent)]
pub struct WSLSessionInformation(wslpluginapi_sys::WSLSessionInformation);
impl WSLSessionInformation {
#[must_use]
#[inline]
pub const fn id(&self) -> SessionID {
SessionID(self.0.SessionId)
}
#[must_use]
#[inline]
pub const unsafe fn user_token(&self) -> HANDLE {
self.0.UserToken
}
#[must_use]
#[inline]
pub const unsafe fn user_sid(&self) -> PSID {
self.0.UserSid
}
}
impl From<wslpluginapi_sys::WSLSessionInformation> for WSLSessionInformation {
#[inline]
fn from(value: wslpluginapi_sys::WSLSessionInformation) -> Self {
Self(value)
}
}
impl From<WSLSessionInformation> for wslpluginapi_sys::WSLSessionInformation {
#[inline]
fn from(value: WSLSessionInformation) -> Self {
value.0
}
}
impl AsRef<WSLSessionInformation> for wslpluginapi_sys::WSLSessionInformation {
#[inline]
fn as_ref(&self) -> &WSLSessionInformation {
unsafe { &*std::ptr::from_ref::<Self>(self).cast::<WSLSessionInformation>() }
}
}
impl AsRef<wslpluginapi_sys::WSLSessionInformation> for WSLSessionInformation {
#[inline]
fn as_ref(&self) -> &wslpluginapi_sys::WSLSessionInformation {
&self.0
}
}
impl hash::Hash for WSLSessionInformation {
#[inline]
fn hash<H: hash::Hasher>(&self, state: &mut H) {
self.0.SessionId.hash(state);
}
}
impl PartialEq for WSLSessionInformation {
#[inline]
fn eq(&self, other: &Self) -> bool {
self.0.SessionId == other.0.SessionId
}
}
impl fmt::Debug for WSLSessionInformation {
#[inline]
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.debug_struct("WSLSessionInformation")
.field("sessionId", &self.0.SessionId)
.field("userToken", &self.0.UserToken)
.field("userSid", &self.0.UserSid)
.finish()
}
}
#[cfg(test)]
mod tests {
use crate::utils::test_transparence;
use super::WSLSessionInformation;
#[test]
fn test_layouts() {
test_transparence::<wslpluginapi_sys::WSLSessionInformation, WSLSessionInformation>();
}
}