use crate::observatory::view::{MetricSamplesView, Observation};
use serde::{Deserialize, Serialize};
#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
#[serde(deny_unknown_fields)]
pub struct CostWindowView {
pub canister_version: u64,
#[serde(deserialize_with = "Option::deserialize")]
pub heap_started_at_ns: Option<u64>,
}
#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
#[serde(rename_all = "snake_case")]
pub enum CostEvidenceLimitation {
SingleSnapshot,
SourceWindowChanged,
SourceWindowUnavailable,
AggregateTimerCallbacksUnqualified,
TransferCoverageIncomplete,
UnattributedExecutionMessageStorage,
}
#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
#[serde(deny_unknown_fields)]
pub struct RoleCostEvidenceView {
pub balance: Observation<MetricSamplesView>,
pub funding_and_callbacks: Observation<MetricSamplesView>,
pub timer_instructions: Observation<MetricSamplesView>,
pub window: Observation<CostWindowView>,
pub limitations: Vec<CostEvidenceLimitation>,
}