use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ReplicationInfo {
progress: usize,
max: usize,
buffered: usize,
queued: usize,
}
impl Default for ReplicationInfo {
fn default() -> Self {
Self::new()
}
}
impl ReplicationInfo {
pub fn new() -> Self {
Self {
progress: 0,
max: 0,
buffered: 0,
queued: 0,
}
}
pub async fn get_progress(&self) -> usize {
self.progress
}
pub async fn get_max(&self) -> usize {
self.max
}
pub async fn get_progress_and_max(&self) -> (usize, usize) {
(self.progress, self.max)
}
pub async fn get_buffered(&self) -> usize {
self.buffered
}
pub async fn get_queued(&self) -> usize {
self.queued
}
pub async fn inc_progress(&mut self, amount: usize) {
self.progress += amount;
}
pub async fn set_max(&mut self, value: usize) {
self.max = value;
}
pub async fn inc_buffered(&mut self) {
self.buffered += 1;
}
pub async fn dec_buffered(&mut self) {
if self.buffered > 0 {
self.buffered -= 1;
}
}
pub async fn inc_queued(&mut self) {
self.queued += 1;
}
pub async fn dec_queued(&mut self) {
if self.queued > 0 {
self.queued -= 1;
}
}
pub async fn reset(&mut self) {
self.progress = 0;
self.max = 0;
self.buffered = 0;
self.queued = 0;
}
pub async fn set_progress(&mut self, value: usize) {
self.progress = value;
}
pub async fn set_progress_and_max(&mut self, progress: usize, max: usize) {
self.progress = progress;
self.max = max;
}
pub async fn progress_percentage(&self) -> f64 {
if self.max == 0 {
0.0
} else {
(self.progress as f64 / self.max as f64) * 100.0
}
}
}