Skip to content
Snippets Groups Projects
Commit d315f583 authored by Georgy Moshkin's avatar Georgy Moshkin :speech_balloon: Committed by Georgy Moshkin
Browse files

refactor: Grade and TargetGrade using define_str_enum!

parent ff7d882b
No related branches found
No related tags found
1 merge request!244attempt at topology governor
...@@ -115,7 +115,7 @@ fn raft_update_peer( ...@@ -115,7 +115,7 @@ fn raft_update_peer(
super::PeerChange::Grade(grade) => { super::PeerChange::Grade(grade) => {
tlog!(Warning, "attempt to change grade by peer"; tlog!(Warning, "attempt to change grade by peer";
"instance_id" => instance_id, "instance_id" => instance_id,
"grade" => grade.to_str(), "grade" => grade.as_str(),
); );
false false
} }
......
...@@ -23,7 +23,7 @@ use serde::{Deserialize, Serialize}; ...@@ -23,7 +23,7 @@ use serde::{Deserialize, Serialize};
use std::any::Any; use std::any::Any;
use std::collections::HashMap; use std::collections::HashMap;
use std::convert::TryFrom; use std::convert::TryFrom;
use std::fmt::{Debug, Display}; use std::fmt::Debug;
use std::time::Duration; use std::time::Duration;
use uuid::Uuid; use uuid::Uuid;
...@@ -834,35 +834,24 @@ pub struct SyncRaftResponse { ...@@ -834,35 +834,24 @@ pub struct SyncRaftResponse {
impl Encode for SyncRaftResponse {} impl Encode for SyncRaftResponse {}
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
/// Activity state of an instance. crate::define_str_enum! {
#[derive(PartialEq, Eq, Clone, Debug, Deserialize, Serialize)] /// Activity state of an instance.
pub enum Grade { pub enum Grade {
// Instance has gracefully shut down or has not been started yet. // Instance has gracefully shut down or has not been started yet.
Offline, Offline = "Offline",
// Instance has synced by commit index. // Instance has synced by commit index.
RaftSynced, RaftSynced = "RaftSynced",
// Instance is active and is handling requests. // Instance is active and is handling requests.
Online, Online = "Online",
// Instance has permanently removed from cluster. // Instance has permanently removed from cluster.
Expelled, Expelled = "Expelled",
}
impl Grade {
const fn to_str(&self) -> &str {
match self {
Self::Offline => "Offline",
Self::RaftSynced => "RaftSynced",
Self::Online => "Online",
Self::Expelled => "Expelled",
}
} }
FromStr::Err = UnknownGrade;
} }
impl Display for Grade { #[derive(thiserror::Error, Debug)]
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { #[error("unknown grade {0:?}")]
f.write_str(self.to_str()) pub struct UnknownGrade(pub String);
}
}
impl Default for Grade { impl Default for Grade {
fn default() -> Self { fn default() -> Self {
...@@ -870,29 +859,22 @@ impl Default for Grade { ...@@ -870,29 +859,22 @@ impl Default for Grade {
} }
} }
#[derive(PartialEq, Eq, Clone, Debug, Deserialize, Serialize)] crate::define_str_enum! {
pub enum TargetGrade { pub enum TargetGrade {
// Instance should be configured up // Instance should be configured up
Online, Online = "Online",
// Instance should be gracefully shut down // Instance should be gracefully shut down
Offline, Offline = "Offline",
// Instance should be removed from cluster // Instance should be removed from cluster
Expelled, Expelled = "Expelled",
}
impl TargetGrade {
const fn to_str(&self) -> &str {
match self {
Self::Online => "Online",
Self::Offline => "Offline",
Self::Expelled => "Expelled",
}
}
}
impl Display for TargetGrade {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
f.write_str(self.to_str())
} }
FromStr::Err = UnknownTargetGrade;
} }
#[derive(thiserror::Error, Debug)]
#[error("unknown target grade {0:?}")]
pub struct UnknownTargetGrade(pub String);
impl Default for TargetGrade { impl Default for TargetGrade {
fn default() -> Self { fn default() -> Self {
Self::Online Self::Online
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment