use serde::{Deserialize, Serialize};
use typed_builder::TypedBuilder;
#[cfg(feature = "cluster")]
use std::collections::HashMap;
#[derive(Serialize, PartialEq, TypedBuilder, Clone)]
#[builder(doc)]
#[serde(rename_all = "camelCase")]
#[cfg(feature = "cluster")]
pub struct CreateDatabaseOptions {
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(default, setter(strip_option))]
sharding: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(default, setter(strip_option))]
replication_factor: Option<usize>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(default, setter(strip_option))]
write_concern: Option<usize>,
}
#[derive(Serialize, PartialEq, TypedBuilder)]
#[serde(rename_all = "camelCase")]
pub(crate) struct CreateDatabase<'a> {
name: &'a str,
#[cfg(feature = "cluster")]
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(default, setter(strip_option))]
options: Option<CreateDatabaseOptions>,
}
#[derive(Serialize, PartialEq, Deserialize)]
pub enum ClusterRole {
Coordinator,
DBServer,
Agent,
}
#[derive(Serialize, PartialEq, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum Engine {
RocksDB,
MMFiles,
}
#[derive(Serialize, PartialEq, Deserialize)]
#[serde(rename_all = "UPPERCASE")]
pub enum ClusterStatus {
Good,
Bad,
Failed,
}
#[derive(Serialize, PartialEq, Deserialize)]
#[serde(rename_all = "UPPERCASE")]
pub enum SyncStatus {
Serving,
Startup,
Stopping,
Stopped,
Shutdown,
Undefined,
Unknown,
}
#[derive(Serialize, Deserialize, PartialEq)]
#[serde(rename_all = "PascalCase")]
#[cfg(feature = "cluster")]
pub struct ServerHealth {
pub endpoint: String,
pub role: ClusterRole,
pub status: ClusterStatus,
pub engine: Engine,
pub version: String,
pub leader: Option<String>,
pub sync_status: Option<SyncStatus>,
}
#[derive(Serialize, Deserialize, PartialEq)]
#[serde(rename_all = "PascalCase")]
#[cfg(feature = "cluster")]
pub struct ClusterHealth {
pub cluster_id: String,
pub health: HashMap<String, ServerHealth>,
}