yedad_eye 0.1.0

YEDAD EYE Matrix Engine - Real-time Network Explorer and Synchronizer
Documentation
// yedad_eye/src/aggregator.rs

use crate::{error::EyeError, types::NodeMatrixRow, YedadEyeProvider};
use futures::future::join_all;
use std::sync::Arc;

pub struct EyeAggregator {
    provider: Arc<dyn YedadEyeProvider>,
}

impl EyeAggregator {
    pub fn new(provider: Arc<dyn YedadEyeProvider>) -> Self {
        Self { provider }
    }

    /// اصلی‌ترین متد برای چیدن یکپارچه ماتریس دو بعدی کل شبکه
    pub async fn reconstruct_matrix(&self) -> Result<Vec<NodeMatrixRow>, EyeError> {
        // ۱. پیدا کردن تمام آدرس‌های فعال
        let addresses = self.provider.fetch_all_active_addresses().await?;
        // ۲. واکشی همزمان (Parallel Fetching) تمام ردیف‌های افقی نوت‌پد ۲
        let futures: Vec<_> = addresses
            .iter()
            .map(|addr| {
                let p = self.provider.clone();
                let a = addr.clone();
                tokio::spawn(async move { p.fetch_node_row(&a).await })
            })
            .collect();

        let results = join_all(futures).await;
        let mut matrix = Vec::new();

        for res in results {
            if let Ok(Ok(row)) = res {
                matrix.push(row);
            }
        }
        // مرتب‌سازی بر اساس آدرس برای چیدمان ثابت هندسی
        matrix.sort_by(|a, b| a.address.cmp(&b.address));
        Ok(matrix)
    }
}