#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "serde", serde(rename_all = "snake_case"))]
#[non_exhaustive]
pub enum Source {
RelationshipWalk,
CpuSets,
Description,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct Observation {
pub source: Source,
pub label: u32,
}
impl Observation {
#[must_use]
pub fn new(source: Source, label: u32) -> Self {
Self { source, label }
}
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "serde", serde(rename_all = "snake_case"))]
#[non_exhaustive]
pub enum ProcessorAttribute {
EfficiencyClass,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct AttributeObservation {
pub processor: crate::domain::ProcessorId,
pub attribute: ProcessorAttribute,
pub value: u32,
pub source: Source,
}
impl AttributeObservation {
#[must_use]
pub fn new(
processor: crate::domain::ProcessorId,
attribute: ProcessorAttribute,
value: u32,
source: Source,
) -> Self {
Self {
processor,
attribute,
value,
source,
}
}
#[must_use]
pub fn subject(&self) -> (crate::domain::ProcessorId, ProcessorAttribute) {
(self.processor, self.attribute)
}
}
#[cfg(test)]
mod tests;