libsurfer/cxxrtl/
sc_message.rs
1use std::collections::HashMap;
2
3use serde::{Deserialize, Serialize};
4
5use crate::cxxrtl_container::{CxxrtlItem, CxxrtlScope};
6
7use super::timestamp::CxxrtlTimestamp;
8
9#[derive(Deserialize, Serialize, Debug)]
10pub struct CxxrtlSample {
11 pub time: CxxrtlTimestamp,
12 pub item_values: String,
13}
14
15#[derive(Deserialize, Debug)]
16pub(crate) struct Features {}
17
18#[derive(Deserialize, Debug, Clone)]
19#[allow(non_camel_case_types)]
20pub enum SimulationStatusType {
21 running,
22 paused,
23 finished,
24}
25#[derive(Deserialize, Debug, Clone)]
26pub struct CxxrtlSimulationStatus {
27 pub status: SimulationStatusType,
28 pub latest_time: CxxrtlTimestamp,
29}
30
31#[derive(Deserialize, Debug)]
32#[serde(tag = "command")]
33#[allow(non_camel_case_types)]
34pub(crate) enum CommandResponse {
35 list_scopes {
36 scopes: HashMap<String, CxxrtlScope>,
37 },
38 list_items {
39 items: HashMap<String, CxxrtlItem>,
40 },
41 get_simulation_status(CxxrtlSimulationStatus),
42 query_interval {
43 samples: Vec<CxxrtlSample>,
44 },
45 reference_items,
46 run_simulation,
47 pause_simulation {
48 time: CxxrtlTimestamp,
49 },
50}
51
52#[derive(Deserialize, Debug, Clone)]
53#[allow(non_camel_case_types)]
54pub(crate) enum PauseCause {
55 until_time,
56 until_diagnostics,
57}
58
59#[derive(Deserialize, Debug)]
60#[serde(tag = "event")]
61#[allow(non_camel_case_types)]
62pub(crate) enum Event {
63 simulation_paused {
64 time: CxxrtlTimestamp,
65 #[allow(unused)]
66 cause: PauseCause,
67 },
68 simulation_finished {
69 time: CxxrtlTimestamp,
70 },
71}
72
73#[derive(Deserialize, Debug)]
74#[allow(non_camel_case_types)]
75pub(crate) struct Error {
76 pub message: String,
77}
78
79#[derive(Deserialize, Debug)]
80#[serde(tag = "type")]
81#[allow(non_camel_case_types, unused)]
82pub(crate) enum SCMessage {
83 greeting {
84 version: i64,
85 commands: Vec<String>,
86 events: Vec<String>,
87 features: Features,
88 },
89 response(CommandResponse),
90 error(Error),
91 event(Event),
92}