use windows::Win32::System::Threading::{
THREAD_PRIORITY_ABOVE_NORMAL, THREAD_PRIORITY_BELOW_NORMAL, THREAD_PRIORITY_HIGHEST,
THREAD_PRIORITY_IDLE, THREAD_PRIORITY_LOWEST, THREAD_PRIORITY_NORMAL,
THREAD_PRIORITY_TIME_CRITICAL,
};
use crate::ThreadPriority;
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct SchedulingPolicy(
).
pub i32,
);
impl SchedulingPolicy {
pub const fn default_for(priority: ThreadPriority) -> Self {
match priority {
ThreadPriority::Background => SchedulingPolicy(THREAD_PRIORITY_IDLE.0),
ThreadPriority::Lowest => SchedulingPolicy(THREAD_PRIORITY_LOWEST.0),
ThreadPriority::BelowNormal => SchedulingPolicy(THREAD_PRIORITY_BELOW_NORMAL.0),
ThreadPriority::Normal => SchedulingPolicy(THREAD_PRIORITY_NORMAL.0),
ThreadPriority::AboveNormal => SchedulingPolicy(THREAD_PRIORITY_ABOVE_NORMAL.0),
ThreadPriority::Highest => SchedulingPolicy(THREAD_PRIORITY_HIGHEST.0),
ThreadPriority::TimeCritical => SchedulingPolicy(THREAD_PRIORITY_TIME_CRITICAL.0),
}
}
}
impl std::fmt::Display for SchedulingPolicy {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
let priority_str = match self.0 {
v if v == THREAD_PRIORITY_IDLE.0 => "Idle",
v if v == THREAD_PRIORITY_LOWEST.0 => "Lowest",
v if v == THREAD_PRIORITY_BELOW_NORMAL.0 => "BelowNormal",
v if v == THREAD_PRIORITY_NORMAL.0 => "Normal",
v if v == THREAD_PRIORITY_ABOVE_NORMAL.0 => "AboveNormal",
v if v == THREAD_PRIORITY_HIGHEST.0 => "Highest",
v if v == THREAD_PRIORITY_TIME_CRITICAL.0 => "TimeCritical",
_ => "Unknown", };
write!(f, "WindowsPriority({})", priority_str)
}
}