use bson::Document;
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
#[non_exhaustive]
pub enum Topology {
Standalone,
ReplicaSet,
Sharded,
Unknown,
}
impl Topology {
pub fn from_hello(reply: &Document) -> Self {
if reply.get_str("msg") == Ok("isdbgrid") {
Self::Sharded
} else if reply.contains_key("setName") {
Self::ReplicaSet
} else {
Self::Standalone
}
}
pub fn supports_change_streams(self) -> bool {
matches!(self, Self::ReplicaSet | Self::Sharded)
}
}