use serde::{Deserialize, Serialize};
#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct MainnetSnsCanisters {
pub root_canister_id: String,
pub governance_canister_id: String,
pub ledger_canister_id: String,
pub swap_canister_id: String,
pub index_canister_id: String,
}
#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct SnsInstanceContext {
pub network: String,
pub sns_wasm_canister_id: String,
pub fetched_at: String,
pub source_endpoint: String,
pub fetched_by: String,
pub id: usize,
pub name: String,
pub root_canister_id: String,
}
#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
pub struct SnsReportContext {
#[serde(flatten)]
pub instance: SnsInstanceContext,
pub governance_canister_id: String,
}
impl<'de> Deserialize<'de> for SnsReportContext {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
D: serde::Deserializer<'de>,
{
#[derive(Deserialize)]
struct Fields {
network: String,
sns_wasm_canister_id: String,
fetched_at: String,
source_endpoint: String,
fetched_by: String,
id: usize,
name: String,
root_canister_id: String,
governance_canister_id: String,
}
let fields = Fields::deserialize(deserializer)?;
Ok(Self {
instance: SnsInstanceContext {
network: fields.network,
sns_wasm_canister_id: fields.sns_wasm_canister_id,
fetched_at: fields.fetched_at,
source_endpoint: fields.source_endpoint,
fetched_by: fields.fetched_by,
id: fields.id,
name: fields.name,
root_canister_id: fields.root_canister_id,
},
governance_canister_id: fields.governance_canister_id,
})
}
}