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 },
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}