Skip to main content

eureka_mmanager/download/messages/
chapter.rs

1use std::future::Future;
2
3use crate::{
4    download::{chapter::ChapterDownloadManager as Manager, DownloadManager, GetManager},
5    MailBoxResult,
6};
7use actix::prelude::*;
8use dev::ToEnvelope;
9
10pub struct GetChapterDownloadManagerMessage;
11
12impl Message for GetChapterDownloadManagerMessage {
13    type Result = Addr<Manager>;
14}
15
16impl Handler<GetChapterDownloadManagerMessage> for DownloadManager {
17    type Result = <GetChapterDownloadManagerMessage as Message>::Result;
18    fn handle(
19        &mut self,
20        _msg: GetChapterDownloadManagerMessage,
21        _ctx: &mut Self::Context,
22    ) -> Self::Result {
23        self.chapter.clone()
24    }
25}
26
27impl<A> GetManager<Manager> for Addr<A>
28where
29    A: Actor + Handler<GetChapterDownloadManagerMessage>,
30    <A as Actor>::Context: ToEnvelope<A, GetChapterDownloadManagerMessage>,
31{
32    async fn get(&self) -> Result<Addr<Manager>, MailboxError> {
33        self.send(GetChapterDownloadManagerMessage).await
34    }
35}
36
37pub trait GetChapterDownloadManager: Sync {
38    fn get_chapter_manager(&self) -> impl Future<Output = MailBoxResult<Addr<Manager>>> + Send;
39}
40
41impl<A> GetChapterDownloadManager for A
42where
43    A: GetManager<Manager> + Sync,
44{
45    fn get_chapter_manager(&self) -> impl Future<Output = MailBoxResult<Addr<Manager>>> + Send {
46        self.get()
47    }
48}