rate-core 0.41.0

The RillRate embedded HTTP server.
Documentation
use super::Supervisor;
use crate::actors::client_session::{ClientLink, SessionAcl};
use anyhow::Error;
use derive_more::From;
use meio::{Action, Address, Interaction, InteractionTask};
use rill_protocol::io::client::ClientServiceResponse;

#[derive(From)]
pub struct SupervisorLink<T: Supervisor> {
    address: Address<T>,
}

impl<T: Supervisor> Clone for SupervisorLink<T> {
    fn clone(&self) -> Self {
        Self {
            address: self.address.clone(),
        }
    }
}

pub struct GetClientAssistant<T: Supervisor> {
    pub link: ClientLink<T>,
    pub session_acl: SessionAcl,
}

impl<T: Supervisor> Interaction for GetClientAssistant<T> {
    type Output = T::ClientAssistant;
}

impl<T: Supervisor> SupervisorLink<T> {
    pub fn get_client_assistant(
        &mut self,
        link: ClientLink<T>,
        session_acl: SessionAcl,
    ) -> InteractionTask<GetClientAssistant<T>> {
        let msg = GetClientAssistant { link, session_acl };
        self.address.interact(msg)
    }
}

#[derive(From)]
pub struct ClientAssistant<T: Supervisor> {
    address: Address<T::ClientAssistant>,
}

pub struct ServiceIncoming {
    pub response: ClientServiceResponse,
}

impl Action for ServiceIncoming {}

impl<T: Supervisor> ClientAssistant<T> {
    pub async fn service_incoming(&mut self, response: ClientServiceResponse) -> Result<(), Error> {
        let msg = ServiceIncoming { response };
        self.address.act(msg).await
    }
}