mod economics;
mod events;
mod metrics;
use serde::{Deserialize as SerdeDeserialize, Serialize};
#[derive(Clone, Copy, Debug, Eq, PartialEq, SerdeDeserialize, Serialize)]
#[serde(rename_all = "snake_case")]
pub enum NnsGovernanceExecutionAssurance {
UnreplicatedQuery,
ReplicatedExecution,
}
impl NnsGovernanceExecutionAssurance {
#[must_use]
pub const fn as_str(self) -> &'static str {
match self {
Self::UnreplicatedQuery => "unreplicated_query",
Self::ReplicatedExecution => "replicated_execution",
}
}
}
#[derive(Clone, Debug, Eq, PartialEq, SerdeDeserialize, Serialize)]
#[serde(tag = "source_transport", rename_all = "snake_case")]
pub enum NnsGovernanceSourceProvenance {
ReplicaQuery {
endpoint: String,
fetched_by: String,
},
ReplicatedInterCanisterCall {
collector_canister_id: String,
},
}
impl NnsGovernanceSourceProvenance {
#[must_use]
pub const fn execution_assurance(&self) -> NnsGovernanceExecutionAssurance {
match self {
Self::ReplicaQuery { .. } => NnsGovernanceExecutionAssurance::UnreplicatedQuery,
Self::ReplicatedInterCanisterCall { .. } => {
NnsGovernanceExecutionAssurance::ReplicatedExecution
}
}
}
}
#[derive(Clone, Debug, Eq, PartialEq, SerdeDeserialize, Serialize)]
pub struct NnsGovernanceReportContext {
pub schema_version: u32,
pub network: String,
pub governance_canister_id: String,
pub fetched_at: String,
pub source: NnsGovernanceSourceProvenance,
}
pub use economics::{
NnsGovernanceDecimal, NnsGovernanceEconomics, NnsGovernanceEconomicsReport,
NnsGovernancePercentage, NnsNeuronsFundEconomics,
NnsNeuronsFundMatchedFundingCurveCoefficients, NnsVotingPowerEconomics,
};
pub use events::{
NnsGovernanceMaturityModulation, NnsGovernanceMaturityModulationReport,
NnsGovernanceProposalId, NnsGovernanceRewardEvent, NnsGovernanceRewardEventReport,
};
pub use metrics::{
NnsGovernanceMetricBucket, NnsGovernanceMetrics, NnsGovernanceMetricsReport,
NnsGovernanceNeuronSubsetMetrics,
};