eureka-mmanager 0.2.0

An Actix actor collection for downloading manga, chapters, covers from Mangadex
Documentation
pub mod manga_data_pull;
pub mod manga_ids_list_data_pull;
pub mod manga_list_data_pull;

use std::future::Future;

use actix::Addr;
use mangadex_api_schema_rust::v5::MangaObject;
use uuid::Uuid;

use crate::{
    data_pulls::manga::{MangaIdsListDataPull, MangaListDataPull},
    download::state::messages::get::GetManagerStateData,
    DirsOptions, MailBoxResult, ManagerCoreResult,
};

pub use self::{
    manga_data_pull::MangaDataPullMessage, manga_ids_list_data_pull::MangaIdsListDataPullMessage,
    manga_list_data_pull::MangaListDataPullMessage,
};

pub trait MangaDataPullAsyncTrait: Sync {
    fn get_manga(&self, id: Uuid) -> impl Future<Output = ManagerCoreResult<MangaObject>> + Send;
    fn get_manga_list(&self) -> impl Future<Output = ManagerCoreResult<MangaListDataPull>> + Send;
    fn get_manga_list_by_ids(
        &self,
        ids: impl Iterator<Item = Uuid> + Send,
    ) -> impl Future<Output = MailBoxResult<MangaIdsListDataPull>> + Send;
}

impl MangaDataPullAsyncTrait for Addr<DirsOptions> {
    async fn get_manga(&self, id: Uuid) -> ManagerCoreResult<MangaObject> {
        self.send(MangaDataPullMessage(id)).await?
    }
    async fn get_manga_list(&self) -> ManagerCoreResult<MangaListDataPull> {
        self.send(MangaListDataPullMessage).await?
    }
    fn get_manga_list_by_ids(
        &self,
        ids: impl Iterator<Item = Uuid> + Send,
    ) -> impl Future<Output = MailBoxResult<MangaIdsListDataPull>> {
        self.send(MangaIdsListDataPullMessage(ids.collect()))
    }
}

impl<A> MangaDataPullAsyncTrait for A
where
    A: GetManagerStateData + Sync,
{
    async fn get_manga(&self, id: Uuid) -> ManagerCoreResult<MangaObject> {
        self.get_dir_options().await?.get_manga(id).await
    }
    async fn get_manga_list(&self) -> ManagerCoreResult<MangaListDataPull> {
        self.get_dir_options().await?.get_manga_list().await
    }
    async fn get_manga_list_by_ids(
        &self,
        ids: impl Iterator<Item = Uuid> + Send,
    ) -> MailBoxResult<MangaIdsListDataPull> {
        self.get_dir_options()
            .await?
            .get_manga_list_by_ids(ids)
            .await
    }
}