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}