tramex_tools/interface/
types.rs1use std::str::FromStr;
4
5use crate::interface::onelog::OneLog;
6
7#[derive(serde::Deserialize, Debug)]
9pub struct WebSocketLog {
11 pub message: String,
13
14 pub message_id: Option<u64>,
16
17 pub time: f64,
19
20 pub utc: f64,
22
23 pub headers: Option<Vec<String>>,
25
26 pub logs: Vec<OneLog>,
28}
29
30#[derive(serde::Deserialize, Debug)]
32pub struct BaseMessage {
33 pub message: String,
35
36 pub name: String,
38
39 pub time: f64,
41
42 pub utc: f64,
44
45 pub version: String,
47}
48
49#[derive(Debug, PartialEq)]
50pub enum LogLevel {
52 ERROR = 1,
54
55 WARN = 2,
57
58 INFO = 3,
60
61 DEBUG = 4,
63}
64
65#[derive(serde::Deserialize, Debug, PartialEq)]
66pub enum SourceLog {
68 ENB,
70
71 MME,
73}
74
75#[derive(serde::Deserialize, Debug, PartialEq, Default, Clone)]
76pub enum Direction {
78 #[default]
79 UL,
81
82 DL,
84
85 FROM,
87
88 TO,
90
91 NA,
93}
94
95impl FromStr for Direction {
96 type Err = ();
97
98 fn from_str(input_string: &str) -> Result<Self, Self::Err> {
99 match input_string.trim() {
100 "UL" => Ok(Direction::UL),
101 "DL" => Ok(Direction::DL),
102 "FROM" => Ok(Direction::FROM),
103 "TO" => Ok(Direction::TO),
104 "" | "-" => Ok(Direction::NA),
105 _ => Err(()),
106 }
107 }
108}
109
110impl<'de> serde::Deserialize<'de> for LogLevel {
111 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
112 where
113 D: serde::Deserializer<'de>,
114 {
115 let deserialized_int = u8::deserialize(deserializer)?;
116 match deserialized_int {
117 1 => Ok(LogLevel::ERROR),
118 2 => Ok(LogLevel::WARN),
119 3 => Ok(LogLevel::INFO),
120 4 => Ok(LogLevel::DEBUG),
121 _ => Ok(LogLevel::INFO), }
123 }
124}