greentic-component 0.5.2

High-level component loader and store for Greentic components
Documentation
use std::collections::BTreeMap;

use serde::{Deserialize, Serialize};

use crate::manifest::ComponentManifest;

#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub struct TelemetrySpec {
    pub span_prefix: String,
    #[serde(default)]
    pub attributes: BTreeMap<String, String>,
    #[serde(default = "default_emit_node_spans")]
    pub emit_node_spans: bool,
}

impl TelemetrySpec {
    pub fn attribute(&self, key: &str) -> Option<&String> {
        self.attributes.get(key)
    }
}

fn default_emit_node_spans() -> bool {
    true
}

pub fn span_name(component: &ComponentManifest, operation: &str) -> String {
    let prefix = component
        .telemetry
        .as_ref()
        .map(|spec| spec.span_prefix.as_str())
        .unwrap_or_else(|| component.id.as_str());
    format!("{prefix}/{operation}")
}