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 logs: Vec<OneLog>,
25}
26
27#[derive(serde::Deserialize, Debug)]
29pub struct BaseMessage {
30 pub message: String,
32
33 pub name: String,
35
36 pub time: f64,
38
39 pub utc: f64,
41
42 pub version: String,
44}
45
46#[derive(Debug, PartialEq)]
47pub enum LogLevel {
49 ERROR = 1,
51
52 WARN = 2,
54
55 INFO = 3,
57
58 DEBUG = 4,
60}
61
62#[derive(serde::Deserialize, Debug, PartialEq)]
63pub enum SourceLog {
65 ENB,
67
68 MME,
70}
71
72#[derive(serde::Deserialize, Debug, PartialEq, Default, Clone)]
73pub enum Direction {
75 #[default]
76 UL,
78
79 DL,
81
82 FROM,
84
85 TO,
87
88 NA,
90}
91
92impl FromStr for Direction {
93 type Err = ();
94
95 fn from_str(input_string: &str) -> Result<Self, Self::Err> {
96 match input_string.trim() {
97 "UL" => Ok(Direction::UL),
98 "DL" => Ok(Direction::DL),
99 "FROM" => Ok(Direction::FROM),
100 "TO" => Ok(Direction::TO),
101 "" | "-" => Ok(Direction::NA),
102 _ => Err(()),
103 }
104 }
105}
106
107impl<'de> serde::Deserialize<'de> for LogLevel {
108 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
109 where
110 D: serde::Deserializer<'de>,
111 {
112 let deserialized_int = u8::deserialize(deserializer)?;
113 match deserialized_int {
114 1 => Ok(LogLevel::ERROR),
115 2 => Ok(LogLevel::WARN),
116 3 => Ok(LogLevel::INFO),
117 4 => Ok(LogLevel::DEBUG),
118 _ => Ok(LogLevel::INFO), }
120 }
121}