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}