use crate::*;
use winapi::um::winnt::{JOBOBJECT_NET_RATE_CONTROL_INFORMATION, JobObjectNetRateControlInformation};
use core::fmt::{self, Debug, Formatter};
#[derive(Clone, Copy, Debug, Default)]
#[repr(C)] pub struct NetRateControlInformation {
pub max_bandwidth: u64,
pub control_flags: NetRateControlFlags,
pub dscp_tag: u8,
}
structure!(@assert layout NetRateControlInformation => JOBOBJECT_NET_RATE_CONTROL_INFORMATION {
max_bandwidth == MaxBandwidth,
control_flags == ControlFlags,
dscp_tag == DscpTag,
});
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash)]
#[repr(transparent)] pub struct NetRateControlFlagsMask(u32);
#[derive(Clone, Copy, Default, PartialEq, Eq, PartialOrd, Ord, Hash)]
#[repr(transparent)] pub struct NetRateControlFlags(u32);
flags!(impl .. for NetRateControlFlags(u32) - NetRateControlFlagsMask);
impl NetRateControlFlags {
pub const unsafe fn from_unchecked(flags: u32) -> Self { Self(flags) }
}
impl Debug for NetRateControlFlags {
fn fmt(&self, fmt: &mut Formatter) -> fmt::Result {
use winapi::um::winnt::*;
flags!(self.0, fmt, "0x{:X}", [
JOB_OBJECT_NET_RATE_CONTROL_ENABLE,
JOB_OBJECT_NET_RATE_CONTROL_MAX_BANDWIDTH,
JOB_OBJECT_NET_RATE_CONTROL_DSCP_TAG,
])
}
}
pub const NET_RATE_CONTROL_ENABLE : NetRateControlFlags = NetRateControlFlags(winapi::um::winnt::JOB_OBJECT_NET_RATE_CONTROL_ENABLE);
pub const NET_RATE_CONTROL_MAX_BANDWIDTH : NetRateControlFlags = NetRateControlFlags(winapi::um::winnt::JOB_OBJECT_NET_RATE_CONTROL_MAX_BANDWIDTH);
pub const NET_RATE_CONTROL_DSCP_TAG : NetRateControlFlags = NetRateControlFlags(winapi::um::winnt::JOB_OBJECT_NET_RATE_CONTROL_DSCP_TAG);
pub const NET_RATE_CONTROL_VALID_FLAGS : NetRateControlFlagsMask = NetRateControlFlagsMask(winapi::um::winnt::JOB_OBJECT_NET_RATE_CONTROL_VALID_FLAGS);
impl job::QueryInformationJobObject for JOBOBJECT_NET_RATE_CONTROL_INFORMATION { fn query_from(job: &job::OwnedHandle) -> Result<Self, Error> { unsafe { job::query_fixed(job, JobObjectNetRateControlInformation) } } }
impl job::QueryInformationJobObject for job::object::NetRateControlInformation { fn query_from(job: &job::OwnedHandle) -> Result<Self, Error> { unsafe { job::query_fixed(job, JobObjectNetRateControlInformation) } } }
impl job::SetInformationJobObject for JOBOBJECT_NET_RATE_CONTROL_INFORMATION { fn set_on(self, job: &job::OwnedHandle) -> Result<(), Error> { unsafe { job::set(job, JobObjectNetRateControlInformation, &self) } } }
impl job::SetInformationJobObject for job::object::NetRateControlInformation { fn set_on(self, job: &job::OwnedHandle) -> Result<(), Error> { unsafe { job::set(job, JobObjectNetRateControlInformation, &self) } } }