melodium-engine 0.10.0

Mélodium core engine and executor implementation
Documentation
use futures::stream::FuturesUnordered;
use melodium_common::executive::{ResultStatus, TrackFuture, TrackId};

// We don't use id nor parent_id for now, but might be useful for reporting implementations.
#[allow(dead_code)]
#[derive(Debug, Clone)]
pub struct InfoTrack {
    pub id: TrackId,
    pub parent_id: Option<TrackId>,
    pub ancestry_level: u64,
    pub results: Option<TrackResult>,
}

impl InfoTrack {
    pub fn new(id: TrackId, parent_id: Option<TrackId>, ancestry_level: u64) -> Self {
        Self {
            id,
            parent_id,
            ancestry_level,
            results: None,
        }
    }
}

// We don't use ancestry_level for now, but might be useful for scheduling implementations.
#[allow(dead_code)]
pub struct ExecutionTrack {
    pub id: TrackId,
    pub ancestry_level: u64,
    pub future: FuturesUnordered<TrackFuture>,
}

impl ExecutionTrack {
    pub fn new(id: TrackId, ancestry_level: u64, future: FuturesUnordered<TrackFuture>) -> Self {
        Self {
            id,
            ancestry_level,
            future,
        }
    }
}

#[derive(Debug, Clone)]
pub enum TrackResult {
    AllOk(TrackId),
    #[allow(dead_code)]
    NotAllOk(TrackId, Vec<ResultStatus>),
}