rsiot/components_config/http_client/
config.rs

1use std::time::Duration;
2
3use crate::{message::MsgDataBound, serde_utils::SerdeAlgKind};
4
5use super::{request_input::RequestInput, request_periodic::RequestPeriodic};
6
7/// Параметры компонента http-client
8#[derive(Clone, Debug)]
9pub struct Config<TMessage>
10where
11    TMessage: MsgDataBound,
12{
13    /// Алгоритм сериализации / десериализации
14    pub serde_alg: SerdeAlgKind,
15
16    /// URL сервера
17    ///
18    /// *Примеры:*
19    ///
20    /// ```
21    /// base_url: "http://10.0.6.5:80".into()
22    /// ```
23    pub base_url: String,
24    /// Таймаут запроса
25    pub timeout: Duration,
26    /// Запросы, которые формируются на основе входящих сообщений
27    pub requests_input: Vec<Box<dyn RequestInput<TMessage>>>,
28    /// Периодические запросы
29    pub requests_periodic: Vec<Box<dyn RequestPeriodic<TMessage>>>,
30}
31
32#[cfg(test)]
33mod tests {
34    use std::time::Duration;
35
36    use crate::{message::example_message::*, serde_utils::SerdeAlgKind};
37
38    use super::super::*;
39
40    #[test]
41    fn connect_with_http_server() {
42        Config::<Custom> {
43            serde_alg: SerdeAlgKind::Json,
44            base_url: "http://10.0.6.5:80".into(),
45            timeout: Duration::from_secs(5),
46            requests_input: vec![Box::new(RequestInputConfig::<Custom, (), ()> {
47                serde_alg: SerdeAlgKind::Json,
48                request_kind: RequestKind::Post,
49                endpoint: "/messages".into(),
50                fn_create_request: |_msg| Some(()),
51                fn_process_response_success: |_| vec![],
52                fn_process_response_error: Vec::new,
53            })],
54            requests_periodic: vec![Box::new(RequestPeriodicConfig::<Custom, (), ()> {
55                serde_alg: SerdeAlgKind::Json,
56                request_kind: RequestKind::Get,
57                endpoint: "/messages".into(),
58                period: Duration::from_secs(2),
59                request_body: (),
60                fn_process_response_success: |_| vec![],
61                fn_process_response_error: Vec::new,
62            })],
63        };
64    }
65}