@(title: &str, routes: &[(Prefix, Vec)]) @{ let max_nlri = 1000; let cnt = if routes.len() > max_nlri { format!( "(showing first {max_nlri}/{} prefixes ({} routes))", routes.len(), routes.iter().take(max_nlri) .map(|(_nlri, routes2)| routes2.len()).sum::() ) } else { format!( "({}/{} prefixes/routes)", routes.len(), routes.iter() .map(|(_nlri, routes2)| routes2.len()).sum::() ) }; }

@title @cnt

@for (nlri, routes2) in routes.iter().take(max_nlri) { @for details in routes2.iter() { @{ let RouteDetails {bmp_router, peer_asn, ribview, origin_asn, rov_status, otc, as_path, communities} = details; } } }
prefix source peer ASN rib view origin ASN RPKI ROV OTC as_path communities
@nlri @if let Some(bmp_router) = bmp_router { @#bmp_details(&bmp_router) } @#peer_asn.map(peer_asn_link).alt("") @ribview.alt("") @origin_asn @rov_status @otc.alt("") @as_path @communities