1use std::str;
19
20#[derive(Debug)]
21pub struct Message {
22 pub token: Option<String>,
23 pub class: MessageClass,
24 pub content: Vec<Variable>,
25}
26
27#[derive(Debug, PartialEq)]
28pub enum MessageClass {
29 Done,
30 Running,
31 Connected,
32 Error,
33 Exit,
34}
35
36#[derive(Debug)]
37pub struct Variable {
38 pub name: VarName,
39 pub value: Value
40}
41
42#[derive(Debug)]
43pub enum Value {
44 String(Constant),
45 VariableList(Vec<Variable>),
46 ValueList(Vec<Value>),
47}
48
49pub type VarName = String;
50pub type Constant = String;
51
52impl str::FromStr for MessageClass {
53 type Err = String;
54 fn from_str(s: &str) -> Result<Self, Self::Err> {
55 match s {
56 "done" => Ok(MessageClass::Done),
57 "running" => Ok(MessageClass::Running),
58 "connected" => Ok(MessageClass::Connected),
59 "error" => Ok(MessageClass::Error),
60 "exit" => Ok(MessageClass::Exit),
61 _ => Err("unrecognized result class".to_string()),
62 }
63 }
64}