eureka-mmanager 0.1.3

An Actix actor collection for downloading manga, chapters, covers from Mangadex
Documentation
use std::future::Future;

use crate::{
    download::{chapter::ChapterDownloadManager as Manager, DownloadManager, GetManager},
    MailBoxResult,
};
use actix::prelude::*;
use dev::ToEnvelope;

pub struct GetChapterDownloadManagerMessage;

impl Message for GetChapterDownloadManagerMessage {
    type Result = Addr<Manager>;
}

impl Handler<GetChapterDownloadManagerMessage> for DownloadManager {
    type Result = <GetChapterDownloadManagerMessage as Message>::Result;
    fn handle(
        &mut self,
        _msg: GetChapterDownloadManagerMessage,
        _ctx: &mut Self::Context,
    ) -> Self::Result {
        self.chapter.clone()
    }
}

impl<A> GetManager<Manager> for Addr<A>
where
    A: Actor + Handler<GetChapterDownloadManagerMessage>,
    <A as Actor>::Context: ToEnvelope<A, GetChapterDownloadManagerMessage>,
{
    async fn get(&self) -> Result<Addr<Manager>, MailboxError> {
        self.send(GetChapterDownloadManagerMessage).await
    }
}

pub trait GetChapterDownloadManager: Sync {
    fn get_chapter_manager(&self) -> impl Future<Output = MailBoxResult<Addr<Manager>>> + Send;
}

impl<A> GetChapterDownloadManager for A
where
    A: GetManager<Manager> + Sync,
{
    fn get_chapter_manager(&self) -> impl Future<Output = MailBoxResult<Addr<Manager>>> + Send {
        self.get()
    }
}