penumbra_sdk_stake/validator/
state.rs1use anyhow::anyhow;
2use penumbra_sdk_proto::{penumbra::core::component::stake::v1 as pb, DomainType};
3use serde::{Deserialize, Serialize};
4
5#[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Copy, Clone, Serialize, Deserialize)]
7#[serde(try_from = "pb::ValidatorState", into = "pb::ValidatorState")]
8pub enum State {
9 Defined,
12 Inactive,
15 Active,
17 Jailed,
20 Tombstoned,
22 Disabled,
26}
27
28impl std::fmt::Display for State {
29 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
30 match self {
31 State::Defined => write!(f, "Defined"),
32 State::Inactive => write!(f, "Inactive"),
33 State::Active => write!(f, "Active"),
34 State::Jailed => write!(f, "Jailed"),
35 State::Tombstoned => write!(f, "Tombstoned"),
36 State::Disabled => write!(f, "Disabled"),
37 }
38 }
39}
40
41impl DomainType for State {
42 type Proto = pb::ValidatorState;
43}
44
45impl From<State> for pb::ValidatorState {
46 fn from(v: State) -> Self {
47 pb::ValidatorState {
48 state: match v {
49 State::Defined => pb::validator_state::ValidatorStateEnum::Defined,
50 State::Inactive => pb::validator_state::ValidatorStateEnum::Inactive,
51 State::Active => pb::validator_state::ValidatorStateEnum::Active,
52 State::Jailed => pb::validator_state::ValidatorStateEnum::Jailed,
53 State::Tombstoned => pb::validator_state::ValidatorStateEnum::Tombstoned,
54 State::Disabled => pb::validator_state::ValidatorStateEnum::Disabled,
55 } as i32,
56 }
57 }
58}
59
60impl TryFrom<pb::ValidatorState> for State {
61 type Error = anyhow::Error;
62 fn try_from(v: pb::ValidatorState) -> Result<Self, Self::Error> {
63 let validator_state = pb::validator_state::ValidatorStateEnum::try_from(v.state)
64 .map_err(|e| anyhow::anyhow!("invalid validator state, error: {e}"))?;
65
66 match validator_state {
67 pb::validator_state::ValidatorStateEnum::Defined => Ok(State::Defined),
68 pb::validator_state::ValidatorStateEnum::Inactive => Ok(State::Inactive),
69 pb::validator_state::ValidatorStateEnum::Active => Ok(State::Active),
70 pb::validator_state::ValidatorStateEnum::Jailed => Ok(State::Jailed),
71 pb::validator_state::ValidatorStateEnum::Tombstoned => Ok(State::Tombstoned),
72 pb::validator_state::ValidatorStateEnum::Disabled => Ok(State::Disabled),
73 pb::validator_state::ValidatorStateEnum::Unspecified => {
74 Err(anyhow!("unspecified validator state!"))
75 }
76 }
77 }
78}