eureka-mmanager 0.1.3

An Actix actor collection for downloading manga, chapters, covers from Mangadex
Documentation
pub mod chapter;
pub mod cover;
pub mod manga;
pub mod state;

use std::{marker::PhantomData, sync::Arc};

use actix::prelude::*;
use tokio::sync::Notify;
use uuid::Uuid;

use super::state::{TaskState, WaitForFinished};

#[derive(Debug, Clone, Copy)]
pub struct DropSingleTaskMessage(pub Uuid);

impl Message for DropSingleTaskMessage {
    type Result = ();
}

#[derive(Debug, Default)]
pub struct SubcribeMessage<T: ?Sized>(PhantomData<T>);

impl<T: 'static> Message for SubcribeMessage<T> {
    type Result = crate::ManagerCoreResult<tokio::sync::watch::Receiver<T>>;
}

impl<T: ?Sized> SubcribeMessage<T> {
    pub fn new() -> Self {
        Self(PhantomData::<T>)
    }
}

#[derive(Debug, Default, Clone, Copy, Message)]
#[rtype(result = "()")]
pub struct StartDownload;

#[derive(Debug, Default)]
pub struct WaitForFinishedMessage<T: ?Sized, L: ?Sized>(PhantomData<T>, PhantomData<L>);

impl<T: ?Sized, L: ?Sized> WaitForFinishedMessage<T, L> {
    pub fn new() -> Self {
        Self(PhantomData::<T>, PhantomData::<L>)
    }
}

impl<T, L> Message for WaitForFinishedMessage<T, L>
where
    T: 'static,
    L: 'static,
{
    type Result = WaitForFinished<T, L>;
}

#[derive(Debug, Clone, Copy, Default, Message)]
#[rtype(result = "()")]
pub struct CancelTaskMessage;

#[derive(Debug, Clone, Copy, Default)]
pub struct TaskStateMessage;

impl Message for TaskStateMessage {
    type Result = TaskState;
}

pub struct GetTasksListMessage;

impl Message for GetTasksListMessage {
    type Result = Vec<Uuid>;
}

pub struct SubcribeToManagerMessage;

impl Message for SubcribeToManagerMessage {
    type Result = Arc<Notify>;
}