Skip to main content

melodium_engine/debug/
mod.rs

1pub use crate::world::{InfoTrack, TrackResult};
2use crate::{
3    building::{BuildId, ContextualEnvironment, HostTreatment},
4    world::World,
5};
6use chrono::{DateTime, Utc};
7use melodium_common::{
8    descriptor::{Model, Treatment},
9    executive::{Context, ModelId, TrackId, Value},
10};
11use std::{collections::HashMap, sync::Arc};
12use uuid::Uuid;
13
14#[derive(Debug, Clone, Copy, PartialEq, Eq)]
15pub enum DebugLevel {
16    None,
17    Basic,
18    Detailed,
19}
20
21#[derive(Debug, Clone)]
22pub struct Event {
23    pub timestamp: DateTime<Utc>,
24    pub kind: EventKind,
25}
26
27impl Event {
28    pub fn new(kind: EventKind) -> Self {
29        Self {
30            timestamp: Utc::now(),
31            kind,
32        }
33    }
34}
35
36#[derive(Debug, Clone)]
37pub enum EventKind {
38    ModelBuilt {
39        model: Arc<dyn Model>,
40        parameters: HashMap<String, Value>,
41        host_treatment: HostTreatment,
42        host_build: Option<BuildId>,
43        label: String,
44    },
45    ModelAdded {
46        model_id: ModelId,
47        model: Arc<dyn Model>,
48    },
49    ContinuousModelsStarted,
50    ContinuousModelsFinished,
51    TreatmentBuilt {
52        treatment: Arc<dyn Treatment>,
53        environment: ContextualEnvironment,
54        host_treatment: HostTreatment,
55        host_build: Option<BuildId>,
56        build_id: BuildId,
57        label: String,
58    },
59    TrackAdded {
60        info: InfoTrack,
61        creation: TrackCreation,
62    },
63    TrackFinished {
64        info: InfoTrack,
65    },
66    TreatmentStarted {
67        treatment: Arc<dyn Treatment>,
68        host_treatment: HostTreatment,
69        host_build: Option<BuildId>,
70        build_id: BuildId,
71        track_id: TrackId,
72        label: String,
73    },
74    TreatmentFinished {
75        treatment: Arc<dyn Treatment>,
76        host_treatment: HostTreatment,
77        host_build: Option<BuildId>,
78        build_id: BuildId,
79        track_id: TrackId,
80        label: String,
81    },
82    DataSent {
83        output: TransmissionDetails,
84        track_id: TrackId,
85        data: DataContent,
86    },
87    DataTransmitted {
88        output: TransmissionDetails,
89        input: TransmissionDetails,
90        track_id: TrackId,
91        data: DataContent,
92    },
93    DataReceived {
94        input: TransmissionDetails,
95        track_id: TrackId,
96        data: DataContent,
97    },
98    OutputClosed {
99        output: TransmissionDetails,
100        track_id: TrackId,
101    },
102    InputClosed {
103        input: TransmissionDetails,
104        track_id: TrackId,
105    },
106    Distant {
107        run_id: Uuid,
108        text: String,
109        //event: Box<Event>,
110    },
111}
112
113#[derive(Debug, Clone)]
114pub enum TrackCreation {
115    Direct,
116    Source {
117        source: String,
118        model_id: ModelId,
119        parameters: HashMap<String, Value>,
120        contexts: Vec<Arc<dyn Context>>,
121    },
122}
123
124#[derive(Debug, Clone)]
125pub enum DataContent {
126    Undetailed,
127    Count { count: usize },
128    Values { values: Vec<Value> },
129}
130
131#[derive(Debug, Clone)]
132pub enum TransmissionDebug {
133    None,
134    Basic(Arc<World>, TransmissionDetails),
135    Detailed(Arc<World>, TransmissionDetails),
136}
137
138#[derive(Debug, Clone)]
139pub struct TransmissionDetails {
140    pub treatment: Arc<dyn Treatment>,
141    pub host_treatment: HostTreatment,
142    pub host_build: Option<BuildId>,
143    pub build_id: BuildId,
144    pub label: String,
145    pub name: String,
146}