ebi_objects/ebi_objects/
executions.rs1use anyhow::Result;
2use chrono::{DateTime, FixedOffset};
3use serde::{Deserialize, Serialize};
4use std::{
5 fmt::{self, Display},
6 io::BufRead,
7};
8
9#[cfg(any(test, feature = "testactivities"))]
10use crate::activity_key::has_activity_key::TestActivityKey;
11use crate::{
12 Exportable, Importable, Infoable,
13 constants::ebi_object::EbiObject,
14 traits::importable::{ImporterParameter, ImporterParameterValues, from_string},
15};
16
17pub const HEADER: &str = "executions";
18
19pub const FORMAT_SPECIFICATION: &str = "not yet finalised.";
20
21#[derive(Serialize, Deserialize, Clone)]
22pub struct Executions {
23 executions: Vec<Execution>,
24}
25
26impl Importable for Executions {
27 const FILE_FORMAT_SPECIFICATION_LATEX: &str = "A JSON-formatted list of executions.
28
29 For instance:
30 \\lstinputlisting[language=ebilines, style=boxed]{../testfiles/a-b.exs}";
31
32 const IMPORTER_PARAMETERS: &[ImporterParameter] = &[];
33
34 fn import_as_object(
35 reader: &mut dyn BufRead,
36 parameter_values: &ImporterParameterValues,
37 ) -> Result<EbiObject> {
38 Ok(EbiObject::Executions(Self::import(
39 reader,
40 parameter_values,
41 )?))
42 }
43
44 fn import(reader: &mut dyn BufRead, _: &ImporterParameterValues) -> Result<Self>
45 where
46 Self: Sized,
47 {
48 Ok(serde_json::from_reader(reader)?)
49 }
50}
51from_string!(Executions);
52
53impl Infoable for Executions {
54 fn info(&self, f: &mut impl std::io::Write) -> Result<()> {
55 writeln!(f, "Number of executions\t\t{}", self.executions.len())?;
56
57 Ok(writeln!(f, "")?)
58 }
59}
60
61impl Display for Executions {
62 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
63 let x = serde_json::to_string(self).unwrap();
64 write!(f, "{}", x)
65 }
66}
67
68impl Exportable for Executions {
69 fn export_from_object(object: EbiObject, f: &mut dyn std::io::Write) -> Result<()> {
70 match object {
71 EbiObject::Executions(exe) => exe.export(f),
72 _ => unreachable!(),
73 }
74 }
75
76 fn export(&self, f: &mut dyn std::io::Write) -> Result<()> {
77 Ok(write!(f, "{}", self)?)
78 }
79}
80
81impl From<Vec<Execution>> for Executions {
82 fn from(value: Vec<Execution>) -> Self {
83 Self { executions: value }
84 }
85}
86
87#[derive(Serialize, Deserialize, Clone)]
88pub struct Execution {
89 pub transition: usize,
90 pub enabled_transitions_at_enablement: Option<Vec<usize>>,
91 pub time_of_enablement: Option<DateTime<FixedOffset>>,
92 pub time_of_execution: Option<DateTime<FixedOffset>>,
93 pub features_at_enablement: Option<Vec<usize>>,
94}
95
96impl Display for Execution {
97 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
98 let x = serde_json::to_string(self).unwrap();
99 write!(f, "{}", x)
100 }
101}
102
103#[cfg(any(test, feature = "testactivities"))]
104impl TestActivityKey for Executions {
105 fn test_activity_key(&self) {
106 }
108}