ic_query/sns/report/model/reports/
invocation.rs1use serde::{Deserialize, Serialize};
8
9#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
16#[serde(rename_all = "snake_case")]
17pub enum SnsCanisterCallType {
18 Query,
20 CompositeQuery,
22 IngressUpdate,
24}
25
26impl SnsCanisterCallType {
27 #[must_use]
29 pub const fn as_str(self) -> &'static str {
30 match self {
31 Self::Query => "query",
32 Self::CompositeQuery => "composite_query",
33 Self::IngressUpdate => "ingress_update",
34 }
35 }
36}
37
38#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
45#[serde(rename_all = "snake_case")]
46pub enum SnsCanisterMethod {
47 ListDeployedSnses,
49 GetMetadata,
51 ListSnsCanisters,
53 GetSnsCanistersSummary,
55 GetMetrics,
57 GetNervousSystemParameters,
59 ListProposals,
61 GetProposal,
63 ListNeurons,
65 GetNeuron,
67 GetLatestRewardEvent,
69 GetLifecycle,
71 GetSaleParameters,
73 GetDerivedState,
75 GetRunningSnsVersion,
77 GetNextSnsVersion,
79}
80
81impl SnsCanisterMethod {
82 #[must_use]
84 pub const fn as_str(self) -> &'static str {
85 match self {
86 Self::ListDeployedSnses => "list_deployed_snses",
87 Self::GetMetadata => "get_metadata",
88 Self::ListSnsCanisters => "list_sns_canisters",
89 Self::GetSnsCanistersSummary => "get_sns_canisters_summary",
90 Self::GetMetrics => "get_metrics",
91 Self::GetNervousSystemParameters => "get_nervous_system_parameters",
92 Self::ListProposals => "list_proposals",
93 Self::GetProposal => "get_proposal",
94 Self::ListNeurons => "list_neurons",
95 Self::GetNeuron => "get_neuron",
96 Self::GetLatestRewardEvent => "get_latest_reward_event",
97 Self::GetLifecycle => "get_lifecycle",
98 Self::GetSaleParameters => "get_sale_parameters",
99 Self::GetDerivedState => "get_derived_state",
100 Self::GetRunningSnsVersion => "get_running_sns_version",
101 Self::GetNextSnsVersion => "get_next_sns_version",
102 }
103 }
104}
105
106#[cfg(test)]
107mod tests {
108 use super::*;
109
110 #[test]
111 fn canister_call_type_labels_round_trip() {
112 for (call_type, label) in [
113 (SnsCanisterCallType::Query, "query"),
114 (SnsCanisterCallType::CompositeQuery, "composite_query"),
115 (SnsCanisterCallType::IngressUpdate, "ingress_update"),
116 ] {
117 assert_json_label(call_type, label);
118 assert_eq!(call_type.as_str(), label);
119 }
120 }
121
122 #[test]
123 fn canister_method_labels_round_trip() {
124 for (method, label) in [
125 (SnsCanisterMethod::ListDeployedSnses, "list_deployed_snses"),
126 (SnsCanisterMethod::GetMetadata, "get_metadata"),
127 (SnsCanisterMethod::ListSnsCanisters, "list_sns_canisters"),
128 (
129 SnsCanisterMethod::GetSnsCanistersSummary,
130 "get_sns_canisters_summary",
131 ),
132 (SnsCanisterMethod::GetMetrics, "get_metrics"),
133 (
134 SnsCanisterMethod::GetNervousSystemParameters,
135 "get_nervous_system_parameters",
136 ),
137 (SnsCanisterMethod::ListProposals, "list_proposals"),
138 (SnsCanisterMethod::GetProposal, "get_proposal"),
139 (SnsCanisterMethod::ListNeurons, "list_neurons"),
140 (SnsCanisterMethod::GetNeuron, "get_neuron"),
141 (
142 SnsCanisterMethod::GetLatestRewardEvent,
143 "get_latest_reward_event",
144 ),
145 (SnsCanisterMethod::GetLifecycle, "get_lifecycle"),
146 (SnsCanisterMethod::GetSaleParameters, "get_sale_parameters"),
147 (SnsCanisterMethod::GetDerivedState, "get_derived_state"),
148 (
149 SnsCanisterMethod::GetRunningSnsVersion,
150 "get_running_sns_version",
151 ),
152 (SnsCanisterMethod::GetNextSnsVersion, "get_next_sns_version"),
153 ] {
154 assert_json_label(method, label);
155 assert_eq!(method.as_str(), label);
156 }
157 }
158
159 fn assert_json_label<T>(value: T, label: &str)
160 where
161 T: Copy + std::fmt::Debug + Eq + Serialize + serde::de::DeserializeOwned,
162 {
163 assert_eq!(
164 serde_json::to_string(&value).unwrap(),
165 format!("\"{label}\"")
166 );
167 assert_eq!(
168 serde_json::from_str::<T>(&format!("\"{label}\"")).unwrap(),
169 value
170 );
171 }
172}