#[cfg(feature = "systemd_252")]
use std::num::NonZeroU8;
pub enum CpuSchedulingPolicy {
Other = 0,
Batch = 3,
Idle = 5,
Fifo = 1,
RoundRobin = 2,
}
pub struct CpuScheduling {
policy: CpuSchedulingPolicy,
real_time_priority: Option<u8>,
reset_on_fork: bool,
}
pub fn marshal(sched: CpuScheduling) -> (i32, Option<i32>, bool) {
let a = sched.policy as i32;
let b = sched.real_time_priority.map(u8::into);
(a, b, sched.reset_on_fork)
}
impl Default for CpuScheduling {
fn default() -> Self {
Self {
policy: CpuSchedulingPolicy::Other,
real_time_priority: None,
reset_on_fork: false,
}
}
}
impl CpuScheduling {
pub fn batch() -> Self {
Self {
policy: CpuSchedulingPolicy::Batch,
..Self::default()
}
}
pub fn idle() -> Self {
Self {
policy: CpuSchedulingPolicy::Idle,
..Self::default()
}
}
#[cfg(feature = "systemd_252")]
pub fn fifo(p: NonZeroU8) -> Self {
Self {
policy: CpuSchedulingPolicy::Fifo,
real_time_priority: Some(p.into()),
reset_on_fork: false,
}
}
pub fn fifo_default_priority() -> Self {
Self {
policy: CpuSchedulingPolicy::Fifo,
..Self::default()
}
}
#[cfg(feature = "systemd_252")]
pub fn round_robin(p: NonZeroU8) -> Self {
Self {
policy: CpuSchedulingPolicy::RoundRobin,
real_time_priority: Some(p.into()),
reset_on_fork: false,
}
}
pub fn round_robin_default_priority() -> Self {
Self {
policy: CpuSchedulingPolicy::RoundRobin,
..Self::default()
}
}
pub fn reset_on_fork(self) -> Self {
Self {
reset_on_fork: true,
..self
}
}
}