use std::sync::Arc;
use anyhow::Result;
use hakanai_lib::client::Client;
use hakanai_lib::models::Payload;
use hakanai_lib::observer::DataTransferObserver;
use crate::observer::ProgressObserver;
pub trait Factory: Send + Sync {
fn new_client(&self) -> impl Client<Payload>;
fn new_observer(&self, label: &str) -> Result<Arc<dyn DataTransferObserver>>;
}
pub struct AppFactory {}
impl Factory for AppFactory {
fn new_client(&self) -> impl Client<Payload> {
hakanai_lib::client::new()
}
fn new_observer(&self, label: &str) -> Result<Arc<dyn DataTransferObserver>> {
Ok(Arc::new(ProgressObserver::new(label)?))
}
}