use crate::sea_orm::DatabaseConnection;
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum Role {
Writing,
Reading,
}
pub struct Databases {
writing: DatabaseConnection,
reading: Option<DatabaseConnection>,
}
impl Databases {
pub fn new(writing: DatabaseConnection) -> Self {
Self {
writing,
reading: None,
}
}
pub fn with_reading(mut self, reading: DatabaseConnection) -> Self {
self.reading = Some(reading);
self
}
pub fn has_replica(&self) -> bool {
self.reading.is_some()
}
pub fn connection(&self, role: Role) -> &DatabaseConnection {
match role {
Role::Writing => &self.writing,
Role::Reading => self.reading.as_ref().unwrap_or(&self.writing),
}
}
pub fn writing(&self) -> &DatabaseConnection {
&self.writing
}
pub fn reading(&self) -> &DatabaseConnection {
self.connection(Role::Reading)
}
}