use super::WSLUserConfiguration;
use flagset::{flags, FlagSet};
flags! {
#[derive(Hash)]
pub enum WSLUserConfigurationFlags: i32 {
CustomKernel = wslpluginapi_sys::WSLUserConfiguration_WSLUserConfigurationCustomKernel,
CustomKernelCommandLine =
wslpluginapi_sys::WSLUserConfiguration_WSLUserConfigurationCustomKernelCommandLine,
}
}
impl From<WSLUserConfiguration> for FlagSet<WSLUserConfigurationFlags> {
#[inline]
fn from(value: WSLUserConfiguration) -> Self {
Self::new_truncated(value.0)
}
}
impl From<FlagSet<WSLUserConfigurationFlags>> for WSLUserConfiguration {
#[inline]
fn from(value: FlagSet<WSLUserConfigurationFlags>) -> Self {
Self::from(value.bits())
}
}
impl WSLUserConfiguration {
#[inline]
#[must_use]
pub fn into_flagset(self) -> FlagSet<WSLUserConfigurationFlags> {
FlagSet::from(self)
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_default_flagset() {
let default_config = FlagSet::<WSLUserConfigurationFlags>::default();
assert_eq!(default_config, FlagSet::default());
assert!(default_config.is_empty());
}
#[test]
fn test_set_and_clear_flagset() {
let mut config = FlagSet::<WSLUserConfigurationFlags>::default();
config |= WSLUserConfigurationFlags::CustomKernel;
assert!(config.contains(WSLUserConfigurationFlags::CustomKernel));
config &= !WSLUserConfigurationFlags::CustomKernel;
assert!(!config.contains(WSLUserConfigurationFlags::CustomKernel));
}
#[test]
fn test_multiple_flags_flagset() {
let mut config = FlagSet::<WSLUserConfigurationFlags>::default();
config |= WSLUserConfigurationFlags::CustomKernel
| WSLUserConfigurationFlags::CustomKernelCommandLine;
assert!(config.contains(WSLUserConfigurationFlags::CustomKernel));
assert!(config.contains(WSLUserConfigurationFlags::CustomKernelCommandLine));
config &= !WSLUserConfigurationFlags::CustomKernel;
assert!(!config.contains(WSLUserConfigurationFlags::CustomKernel));
assert!(config.contains(WSLUserConfigurationFlags::CustomKernelCommandLine));
}
#[test]
fn test_conversion_between_flags_and_configuration() {
let config = WSLUserConfiguration(3); let flags: FlagSet<WSLUserConfigurationFlags> = config.into();
assert!(flags.contains(WSLUserConfigurationFlags::CustomKernel));
assert!(flags.contains(WSLUserConfigurationFlags::CustomKernelCommandLine));
let back_to_config: WSLUserConfiguration = flags.into();
assert_eq!(back_to_config, WSLUserConfiguration(3));
}
}