// Copyright 2022 - Nym Technologies SA // SPDX-License-Identifier: Apache-2.0 use mixnet_contract_common::reward_params::RewardParams; use schemars::JsonSchema; use serde::{Deserialize, Serialize}; use std::fmt; #[derive(Clone, Copy, Debug, Serialize, Deserialize, PartialEq, Eq, JsonSchema)] #[cfg_attr(test, derive(ts_rs::TS))] #[cfg_attr( test, ts(export, export_to = "../../nym-wallet/src/types/rust/mixnodestatus.ts") )] #[serde(rename_all = "snake_case")] pub enum MixnodeStatus { Active, // in both the active set and the rewarded set Standby, // only in the rewarded set Inactive, // in neither the rewarded set nor the active set, but is bonded NotFound, // doesn't even exist in the bonded set } impl MixnodeStatus { pub fn is_active(&self) -> bool { *self == MixnodeStatus::Active } } #[derive(Clone, Debug, Serialize, Deserialize, JsonSchema)] #[cfg_attr(test, derive(ts_rs::TS))] #[cfg_attr( test, ts( export, export_to = "../../nym-wallet/src/types/rust/corenodestatusresponse.ts" ) )] pub struct CoreNodeStatusResponse { pub identity: String, pub count: i32, } #[derive(Clone, Copy, Debug, Serialize, Deserialize, JsonSchema)] #[cfg_attr(test, derive(ts_rs::TS))] #[cfg_attr( test, ts( export, export_to = "../../nym-wallet/src/types/rust/mixnodestatusresponse.ts" ) )] pub struct MixnodeStatusResponse { pub status: MixnodeStatus, } #[derive(Clone, Copy, Debug, Serialize, Deserialize, JsonSchema)] pub struct RewardEstimationResponse { pub estimated_total_node_reward: u64, pub estimated_operator_reward: u64, pub estimated_delegators_reward: u64, pub reward_params: RewardParams, pub as_at: i64, } #[derive(Clone, Debug, Serialize, Deserialize, JsonSchema)] pub struct UptimeResponse { pub identity: String, pub avg_uptime: u8, } #[derive(Clone, Copy, Debug, Serialize, Deserialize, JsonSchema)] #[cfg_attr(test, derive(ts_rs::TS))] #[cfg_attr( test, ts( export, export_to = "../../nym-wallet/src/types/rust/stakesaturationresponse.ts" ) )] pub struct StakeSaturationResponse { pub saturation: f32, pub as_at: i64, } #[derive(Clone, Debug, Serialize, Deserialize, JsonSchema)] #[cfg_attr(test, derive(ts_rs::TS))] #[cfg_attr( test, ts( export, export_to = "../../nym-wallet/src/types/rust/selectionchance.ts" ) )] pub enum SelectionChance { VeryHigh, High, Moderate, Low, VeryLow, } impl From for SelectionChance { fn from(p: f64) -> SelectionChance { match p { p if p >= 1. => SelectionChance::VeryHigh, p if p > 0.9 => SelectionChance::High, p if p > 0.7 => SelectionChance::Moderate, p if p > 0.5 => SelectionChance::Low, _ => SelectionChance::VeryLow, } } } impl fmt::Display for SelectionChance { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { match self { SelectionChance::VeryHigh => write!(f, "VeryHigh"), SelectionChance::High => write!(f, "High"), SelectionChance::Moderate => write!(f, "Moderate"), SelectionChance::Low => write!(f, "Low"), SelectionChance::VeryLow => write!(f, "VeryLow"), } } } #[derive(Clone, Debug, Serialize, Deserialize, JsonSchema)] #[cfg_attr(test, derive(ts_rs::TS))] #[cfg_attr( test, ts( export, export_to = "../../nym-wallet/src/types/rust/inclusionprobabilityresponse.ts" ) )] pub struct InclusionProbabilityResponse { pub in_active: SelectionChance, pub in_reserve: SelectionChance, } impl fmt::Display for InclusionProbabilityResponse { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { write!( f, "in_active: {}, in_reserve: {}", self.in_active, self.in_reserve ) } }