use super::progress::MigrationProgressEvent;
use crate::migration::functions::MigrationProgressCallback;
#[derive(Debug, Clone, Default)]
pub struct CollectingCallback {
pub(crate) events: Vec<MigrationProgressEvent>,
}
impl CollectingCallback {
pub fn new() -> Self {
Self { events: Vec::new() }
}
pub fn events(&self) -> &[MigrationProgressEvent] {
&self.events
}
pub fn event_count(&self) -> usize {
self.events.len()
}
pub fn clear(&mut self) {
self.events.clear();
}
pub fn latest_event(&self) -> Option<&MigrationProgressEvent> {
self.events.last()
}
}
#[derive(Debug, Clone)]
pub struct LoggingCallback {
pub(crate) verbose: bool,
}
impl LoggingCallback {
pub fn new(verbose: bool) -> Self {
Self { verbose }
}
}
#[derive(Default)]
pub struct MultiCallback {
pub(crate) callbacks: Vec<Box<dyn MigrationProgressCallback>>,
}
impl MultiCallback {
pub fn new() -> Self {
Self {
callbacks: Vec::new(),
}
}
pub fn add<C: MigrationProgressCallback + 'static>(&mut self, callback: C) {
self.callbacks.push(Box::new(callback));
}
pub fn callback_count(&self) -> usize {
self.callbacks.len()
}
}