lightswitch_metadata/
types.rs1use std::fmt::{Display, Formatter};
2use thiserror::Error;
3
4#[derive(Clone, Debug, Eq, PartialEq)]
5pub enum MetadataLabelValue {
6 String(String),
7 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 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 fn get_metadata(&self) -> Result<Vec<MetadataLabel>, SystemMetadataProviderError>;
67}