Skip to main content

lightswitch_metadata/
types.rs

1use std::fmt::{Display, Formatter};
2use thiserror::Error;
3
4#[derive(Clone, Debug, Eq, PartialEq)]
5pub enum MetadataLabelValue {
6    String(String),
7    /// Value and unit.
8    Number(i64, String),
9}
10
11#[derive(Clone, Debug, Eq, PartialEq)]
12pub struct MetadataLabel {
13    pub key: String,
14    pub value: MetadataLabelValue,
15}
16
17impl MetadataLabel {
18    pub fn from_string_value(key: String, value: String) -> Self {
19        MetadataLabel {
20            key,
21            value: MetadataLabelValue::String(value),
22        }
23    }
24
25    pub fn from_number_value(key: String, value: i64, unit: String) -> Self {
26        MetadataLabel {
27            key,
28            value: MetadataLabelValue::Number(value, unit),
29        }
30    }
31}
32
33#[derive(Debug, Clone, Copy, Eq, Hash, PartialEq)]
34pub struct TaskKey {
35    pub pid: i32,
36    pub tid: i32,
37}
38
39impl Display for TaskKey {
40    fn fmt(&self, f: &mut Formatter) -> std::fmt::Result {
41        write!(f, "pid={}, tid={}", self.pid, self.tid)
42    }
43}
44
45#[derive(Debug, Error)]
46pub enum TaskMetadataProviderError {
47    #[error("Failed to retrieve metadata for task_key={0}, error={1}")]
48    ErrorRetrievingMetadata(TaskKey, String),
49}
50
51pub trait TaskMetadataProvider {
52    /// Return a vector of labels that apply to the provided task_key.
53    fn get_metadata(
54        &self,
55        task_key: TaskKey,
56    ) -> Result<Vec<MetadataLabel>, TaskMetadataProviderError>;
57}
58
59#[derive(Debug, Error)]
60pub enum SystemMetadataProviderError {
61    #[error("Failed to retrieve system metadata, error={0}")]
62    ErrorRetrievingMetadata(String),
63}
64pub trait SystemMetadataProvider {
65    /// Return a vector of labels that apply to the current host system.
66    fn get_metadata(&self) -> Result<Vec<MetadataLabel>, SystemMetadataProviderError>;
67}