#[derive(Debug, Clone, Ord, PartialOrd, Eq, PartialEq, Hash)]
#[derive(Deserialize, Serialize)]
#[serde(default, deny_unknown_fields)]
pub struct CpuMaximumBandwidthLimit
{
pub quota: MaximumNumber<Microseconds>,
pub period: Microseconds,
}
impl Default for CpuMaximumBandwidthLimit
{
#[inline(always)]
fn default() -> Self
{
Self
{
quota: MaximumNumber::default(),
period: Microseconds(100_000)
}
}
}
impl FromBytes for CpuMaximumBandwidthLimit
{
type Error = ParseNumberError;
fn from_bytes(bytes: &[u8]) -> Result<Self, Self::Error>
{
let mut iterator = bytes.split_bytes_n(2, b' ');
Ok
(
Self
{
quota: MaximumNumber::from_bytes(iterator.next().unwrap())?,
period: Microseconds::from_bytes(iterator.next().ok_or(ParseNumberError::TooShort)?)?,
}
)
}
}
impl<'a> IntoLineFeedTerminatedByteString<'a> for CpuMaximumBandwidthLimit
{
#[inline(always)]
fn into_line_feed_terminated_byte_string(self) -> Cow<'a, [u8]>
{
use self::MaximumNumber::*;
let string = match self.quota
{
Finite(value) => format!("{:?} {:?}\n", value.0, self.period.0),
Maximum => format!("max {:?}\n", self.period.0),
};
Cow::from(string.into_bytes())
}
}