canic_core/dto/
metrics.rs1use crate::dto::prelude::*;
2
3pub use crate::domain::metrics::MetricsKind;
4
5#[derive(CandidType, Debug, Deserialize)]
16pub struct MetricEntry {
17 pub labels: Vec<String>,
19
20 pub principal: Option<Principal>,
22
23 pub value: MetricValue,
25}
26
27#[derive(CandidType, Debug, Deserialize)]
32pub enum MetricValue {
33 Count(u64),
34 CountAndU64 { count: u64, value_u64: u64 },
35 U128(u128),
36}
37
38#[derive(CandidType, Deserialize)]
45pub struct QueryPerfSample<T> {
46 pub value: T,
48
49 pub local_instructions: u64,
51}
52
53#[cfg(test)]
54mod tests {
55 use super::*;
56
57 #[test]
58 fn reexported_metrics_kind_roundtrips_through_candid() {
59 let kind = crate::domain::metrics::MetricsKind::Security;
60
61 let bytes = candid::encode_one(kind).expect("encode metrics kind");
62 let decoded: MetricsKind = candid::decode_one(&bytes).expect("decode metrics kind");
63
64 assert!(matches!(decoded, MetricsKind::Security));
65 }
66}