use std::collections::BTreeMap;
use std::collections::BTreeSet;
use std::fmt::Debug;
use crate::compat::Upgrade;
#[derive(Debug, serde::Serialize, serde::Deserialize)]
pub struct Membership {
pub configs: Vec<BTreeSet<u64>>,
pub nodes: Option<BTreeMap<u64, crate::EmptyNode>>,
pub all_nodes: Option<BTreeSet<u64>>,
}
impl Upgrade<crate::Membership<u64, crate::EmptyNode>> for or07::Membership {
fn upgrade(self) -> crate::Membership<u64, crate::EmptyNode> {
let configs = self.get_configs().clone();
let nodes = self.all_nodes().iter().map(|nid| (*nid, crate::EmptyNode::new())).collect::<BTreeMap<_, _>>();
crate::Membership::new(configs, nodes)
}
}
impl Upgrade<crate::Membership<u64, crate::EmptyNode>> for Membership {
fn upgrade(self) -> crate::Membership<u64, crate::EmptyNode> {
if let Some(ns) = self.nodes {
crate::Membership::new(self.configs, ns)
} else {
crate::Membership::new(self.configs, self.all_nodes.unwrap())
}
}
}