melodium-engine 0.10.0

Mélodium core engine and executor implementation
Documentation
pub use crate::world::{InfoTrack, TrackResult};
use crate::{
    building::{BuildId, ContextualEnvironment, HostTreatment},
    world::World,
};
use chrono::{DateTime, Utc};
use melodium_common::{
    descriptor::{Model, Treatment},
    executive::{Context, ModelId, TrackId, Value},
};
use std::{collections::HashMap, sync::Arc};
use uuid::Uuid;

#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum DebugLevel {
    None,
    Basic,
    Detailed,
}

#[derive(Debug, Clone)]
pub struct Event {
    pub timestamp: DateTime<Utc>,
    pub kind: EventKind,
}

impl Event {
    pub fn new(kind: EventKind) -> Self {
        Self {
            timestamp: Utc::now(),
            kind,
        }
    }
}

#[derive(Debug, Clone)]
pub enum EventKind {
    ModelBuilt {
        model: Arc<dyn Model>,
        parameters: HashMap<String, Value>,
        host_treatment: HostTreatment,
        host_build: Option<BuildId>,
        label: String,
    },
    ModelAdded {
        model_id: ModelId,
        model: Arc<dyn Model>,
    },
    ContinuousModelsStarted,
    ContinuousModelsFinished,
    TreatmentBuilt {
        treatment: Arc<dyn Treatment>,
        environment: ContextualEnvironment,
        host_treatment: HostTreatment,
        host_build: Option<BuildId>,
        build_id: BuildId,
        label: String,
    },
    TrackAdded {
        info: InfoTrack,
        creation: TrackCreation,
    },
    TrackFinished {
        info: InfoTrack,
    },
    TreatmentStarted {
        treatment: Arc<dyn Treatment>,
        host_treatment: HostTreatment,
        host_build: Option<BuildId>,
        build_id: BuildId,
        track_id: TrackId,
        label: String,
    },
    TreatmentFinished {
        treatment: Arc<dyn Treatment>,
        host_treatment: HostTreatment,
        host_build: Option<BuildId>,
        build_id: BuildId,
        track_id: TrackId,
        label: String,
    },
    DataSent {
        output: TransmissionDetails,
        track_id: TrackId,
        data: DataContent,
    },
    DataTransmitted {
        output: TransmissionDetails,
        input: TransmissionDetails,
        track_id: TrackId,
        data: DataContent,
    },
    DataReceived {
        input: TransmissionDetails,
        track_id: TrackId,
        data: DataContent,
    },
    OutputClosed {
        output: TransmissionDetails,
        track_id: TrackId,
    },
    InputClosed {
        input: TransmissionDetails,
        track_id: TrackId,
    },
    Distant {
        run_id: Uuid,
        text: String,
        //event: Box<Event>,
    },
}

#[derive(Debug, Clone)]
pub enum TrackCreation {
    Direct,
    Source {
        source: String,
        model_id: ModelId,
        parameters: HashMap<String, Value>,
        contexts: Vec<Arc<dyn Context>>,
    },
}

#[derive(Debug, Clone)]
pub enum DataContent {
    Undetailed,
    Count { count: usize },
    Values { values: Vec<Value> },
}

#[derive(Debug, Clone)]
pub enum TransmissionDebug {
    None,
    Basic(Arc<World>, TransmissionDetails),
    Detailed(Arc<World>, TransmissionDetails),
}

#[derive(Debug, Clone)]
pub struct TransmissionDetails {
    pub treatment: Arc<dyn Treatment>,
    pub host_treatment: HostTreatment,
    pub host_build: Option<BuildId>,
    pub build_id: BuildId,
    pub label: String,
    pub name: String,
}