hibana 0.9.2

Session-typed choreographic programming for no_std Rust protocols, inspired by affine MPST
Documentation
use super::{EndpointResidentBudget, Rendezvous, ResourceScope, Transport};

impl<'rv, 'cfg, T: Transport> Rendezvous<'rv, 'cfg, T>
where
    'cfg: 'rv,
{
    pub(crate) fn ensure_core_lane_storage_for_assoc_entries(
        &mut self,
        required_lane_slots: usize,
        required_assoc_slots: usize,
    ) -> Result<(), ResourceScope> {
        self.ensure_core_lane_tables_for_assoc_entries(required_lane_slots, required_assoc_slots)
    }

    pub(crate) fn ensure_endpoint_resident_budget(
        &mut self,
        budget: EndpointResidentBudget,
    ) -> Result<(), ResourceScope> {
        let route_frame_slots = core::cmp::max(
            self.resident_route_frame_slots_floor(),
            budget.route_frame_slots as usize,
        );
        let route_lane_slots = core::cmp::max(
            self.resident_route_lane_slots_floor(),
            budget.route_lane_slots as usize,
        );
        let frontier_workspace_bytes = core::cmp::max(
            self.resident_frontier_workspace_floor(),
            budget.frontier_workspace_bytes as usize,
        );
        self.ensure_frontier_workspace_capacity(frontier_workspace_bytes)?;
        self.ensure_route_table_capacity(route_frame_slots, route_lane_slots)?;
        Ok(())
    }
}