use crate::get_attrs;
use opentelemetry::Key;
use opentelemetry_sdk::Resource;
use prometheus::proto::LabelPair;
use std::collections::HashSet;
#[derive(Debug, Default)]
#[non_exhaustive]
pub enum ResourceSelector {
All,
#[default]
None,
KeyAllowList(HashSet<Key>),
}
impl From<HashSet<Key>> for ResourceSelector {
fn from(keys: HashSet<Key>) -> Self {
ResourceSelector::KeyAllowList(keys)
}
}
impl ResourceSelector {
pub(crate) fn select(&self, resource: &Resource) -> Vec<LabelPair> {
match self {
ResourceSelector::All => get_attrs(&mut resource.iter(), &[]),
ResourceSelector::None => Vec::new(),
ResourceSelector::KeyAllowList(keys) => {
get_attrs(&mut resource.iter().filter(|(k, _)| keys.contains(*k)), &[])
}
}
}
}