use crate::metrics::model::{MetricEntry, MetricValue};
use canic_contracts::dto::{
metrics::{MetricEntry as MetricEntryDto, MetricValue as MetricValueDto},
page::Page,
};
pub(super) fn metric_page(page: Page<MetricEntryDto>) -> Vec<MetricEntry> {
page.entries.into_iter().map(metric_entry).collect()
}
fn metric_entry(entry: MetricEntryDto) -> MetricEntry {
MetricEntry {
labels: entry.labels,
principal: entry.principal.map(|principal| principal.to_text()),
value: metric_value(entry.value),
}
}
const fn metric_value(value: MetricValueDto) -> MetricValue {
match value {
MetricValueDto::Count(count) => MetricValue::Count { count },
MetricValueDto::CountAndU64 { count, value_u64 } => {
MetricValue::CountAndU64 { count, value_u64 }
}
MetricValueDto::U128(value) => MetricValue::U128 { value },
}
}