rate-core 0.41.0

The RillRate embedded HTTP server.
Documentation
use super::Router;
use crate::actors::supervisor::Supervisor;
use crate::connection_limiter::Limit;
use anyhow::Error;
use async_trait::async_trait;
use meio::{Action, ActionHandler, Context};

pub struct ChangeLimits {
    pub clients_limit: Limit,
    pub providers_limit: Limit,
}

impl Action for ChangeLimits {}

#[async_trait]
impl<T: Supervisor> ActionHandler<ChangeLimits> for Router<T> {
    async fn handle(&mut self, limits: ChangeLimits, ctx: &mut Context<Self>) -> Result<(), Error> {
        let denied_providers = self.active_providers.set_limit(limits.providers_limit);
        for mut provider in denied_providers {
            ctx.interrupt(&mut provider).ok();
        }
        let denied_clients = self.active_clients.set_limit(limits.clients_limit);
        for mut client in denied_clients {
            ctx.interrupt(&mut client).ok();
        }
        Ok(())
    }
}