eureka-mmanager 0.4.0

An Actix actor collection for downloading manga, chapters, covers from Mangadex
Documentation
pub mod client;
pub mod dir_options;
pub mod history;

use std::future::Future;

use actix::Addr;
use mangadex_api::MangaDexClient;

use crate::{
    download::{messages::state::GetManagerState, state::DownloadManagerState},
    history::service::HistoryActorService,
    DirsOptions, MailBoxResult,
};

pub use self::{
    client::UpdateClientMessage, dir_options::UpdateDirOptionsMessage,
    history::UpdateHistoryMessage,
};

pub trait UpdateManagerStateData: Sync {
    fn set_client(
        &self,
        client: impl Into<MangaDexClient> + Send + 'static,
    ) -> impl Future<Output = MailBoxResult<MangaDexClient>> + Send;
    fn set_dir_options(
        &self,
        dirs_options: impl Into<Addr<DirsOptions>> + Send + 'static,
    ) -> impl Future<Output = MailBoxResult<Addr<DirsOptions>>> + Send;
    fn set_history(
        &self,
        history: impl Into<Addr<HistoryActorService>> + Send + 'static,
    ) -> impl Future<Output = MailBoxResult<Addr<HistoryActorService>>> + Send;
}

impl UpdateManagerStateData for Addr<DownloadManagerState> {
    fn set_client(
        &self,
        client: impl Into<MangaDexClient> + Send + 'static,
    ) -> impl Future<Output = MailBoxResult<MangaDexClient>> + Send {
        self.send(UpdateClientMessage(client.into()))
    }
    fn set_dir_options(
        &self,
        dirs_options: impl Into<Addr<DirsOptions>> + Send + 'static,
    ) -> impl Future<Output = MailBoxResult<Addr<DirsOptions>>> + Send {
        self.send(UpdateDirOptionsMessage(dirs_options.into()))
    }
    fn set_history(
        &self,
        history: impl Into<Addr<HistoryActorService>> + Send + 'static,
    ) -> impl Future<Output = MailBoxResult<Addr<HistoryActorService>>> + Send {
        self.send(UpdateHistoryMessage(history.into()))
    }
}

impl<A> UpdateManagerStateData for A
where
    A: GetManagerState + Sync,
{
    async fn set_client(
        &self,
        client: impl Into<MangaDexClient> + Send + 'static,
    ) -> MailBoxResult<MangaDexClient> {
        self.get_manager_state().await?.set_client(client).await
    }
    async fn set_dir_options(
        &self,
        dirs_options: impl Into<Addr<DirsOptions>> + Send + 'static,
    ) -> MailBoxResult<Addr<DirsOptions>> {
        self.get_manager_state()
            .await?
            .set_dir_options(dirs_options)
            .await
    }
    async fn set_history(
        &self,
        history: impl Into<Addr<HistoryActorService>> + Send + 'static,
    ) -> MailBoxResult<Addr<HistoryActorService>> {
        self.get_manager_state().await?.set_history(history).await
    }
}