hibana 0.9.2

Session-typed choreographic programming for no_std Rust protocols, inspired by affine MPST
Documentation
//! Projected route-effect metadata helpers.

use crate::global::compiled::images::{CompiledProgramRef, RouteResolverSite};

pub(crate) struct ProgramImageRouteResolverSiteIter<'a> {
    program: &'a CompiledProgramRef,
    row: usize,
}

impl<'a> ProgramImageRouteResolverSiteIter<'a> {
    #[inline(always)]
    pub(crate) const fn new(program: &'a CompiledProgramRef) -> Self {
        Self { program, row: 0 }
    }
}

impl Iterator for ProgramImageRouteResolverSiteIter<'_> {
    type Item = RouteResolverSite;

    fn next(&mut self) -> Option<Self::Item> {
        while self.row < self.program.route_resolver_row_count() {
            let row = self.row;
            self.row += 1;
            let scope = self.program.route_resolver_scope_at_row(row)?;
            let Some(resolver_id) = self.program.route_resolver_id_at_row(row) else {
                continue;
            };
            return Some(RouteResolverSite::new(scope, resolver_id));
        }
        None
    }
}