rsiot_components_config/http_server/mod.rs
1//! Конфигурация HTTP-сервера
2//!
3//! Тестирование:
4//!
5//! ```bash
6//! cargo test -p rsiot-components-config --doc http_server
7//! ```
8
9use rsiot_messages_core::*;
10
11/// Конфигурация компонента http-server
12#[derive(Clone, Debug)]
13pub struct Config<TMsg>
14where
15 TMsg: Clone,
16{
17 /// Порт, через который доступен сервер
18 pub port: u16,
19
20 /// Функция преобразования сообщений в текст
21 ///
22 /// # Примеры
23 ///
24 /// ## Заглушка
25 ///
26 /// ```rust
27 /// # use rsiot_components_config::http_server as cmp_http_server;
28 /// # use rsiot_messages_core::{example_message::*, *};
29 /// # // insert from tests::stub
30 /// # cmp_http_server::Config::<ExampleMessage> {
31 /// # port: 8000,
32 /// fn_input: |_| Ok(None),
33 /// # fn_output: |_| Ok(None),
34 /// # };
35 /// ```
36 ///
37 /// ## Сериализация в json
38 ///
39 /// ```rust
40 /// # use rsiot_components_config::http_server as cmp_http_server;
41 /// # use rsiot_messages_core::{example_message::*, *};
42 /// # // insert from tests::fn_input_json
43 /// # cmp_http_server::Config::<ExampleMessage> {
44 /// # port: 8000,
45 /// fn_input: |msg: &Message<ExampleMessage>| {
46 /// let text = msg.serialize()?;
47 /// Ok(Some(text))
48 /// },
49 /// # fn_output: |_| Ok(None),
50 /// # };
51 /// ```
52 pub fn_input: fn(&Message<TMsg>) -> anyhow::Result<Option<String>>,
53
54 /// Функция преобразования текста в сообщения
55 ///
56 /// # Примеры
57 ///
58 /// ## Заглушка
59 ///
60 /// ```rust
61 /// # use rsiot_components_config::http_server as cmp_http_server;
62 /// # use rsiot_messages_core::{example_message::*, *};
63 /// # // insert from tests::stub
64 /// # cmp_http_server::Config::<ExampleMessage> {
65 /// # port: 8000,
66 /// # fn_input: |_| Ok(None),
67 /// fn_output: |_| Ok(None),
68 /// # };
69 /// ```
70 ///
71 /// ## Десериализация из json
72 ///
73 /// ```rust
74 /// # use rsiot_components_config::http_server as cmp_http_server;
75 /// # use rsiot_messages_core::{example_message::*, *};
76 /// # // insert from tests::fn_input_json
77 /// # cmp_http_server::Config::<ExampleMessage> {
78 /// # port: 8000,
79 /// # fn_input: |_| Ok(None),
80 /// fn_output: |text: &str| {
81 /// let msg = Message::deserialize(text)?;
82 /// Ok(Some(msg))
83 /// },
84 /// # };
85 /// ```
86 pub fn_output: fn(&str) -> anyhow::Result<Option<Message<TMsg>>>,
87}
88
89#[cfg(test)]
90mod tests {
91 use crate::http_server as cmp_http_server;
92 use rsiot_messages_core::{example_message::*, *};
93
94 #[allow(clippy::no_effect)]
95 #[test]
96 fn stub() {
97 cmp_http_server::Config::<Custom> {
98 port: 8000,
99 fn_input: |_| Ok(None),
100 fn_output: |_| Ok(None),
101 };
102 }
103
104 #[allow(clippy::no_effect)]
105 #[test]
106 fn fn_input_json() {
107 cmp_http_server::Config::<Custom> {
108 port: 8000,
109 fn_input: |msg: &Message<Custom>| {
110 let text = msg.serialize()?;
111 Ok(Some(text))
112 },
113 fn_output: |_| Ok(None),
114 };
115 }
116
117 #[allow(clippy::no_effect)]
118 #[test]
119 fn fn_output_json() {
120 cmp_http_server::Config::<Custom> {
121 port: 8000,
122 fn_input: |_| Ok(None),
123 fn_output: |text: &str| {
124 let msg = Message::deserialize(text)?;
125 Ok(Some(msg))
126 },
127 };
128 }
129}