rsiot/message/msg_data_bound.rs
1use std::fmt::Debug;
2
3use serde::{de::DeserializeOwned, Serialize};
4
5use super::{MsgKey, TimeToLiveValue};
6
7/// Ограничения на данные, которые могут содержать сообщения
8///
9/// На перечислениях можно автоматически реализовывать трейты:
10///
11/// ```rust
12/// use serde::{Deserialize, Serialize};
13///
14/// #[derive(Clone, Debug, Deserialize, MsgKey, PartialEq, Serialize)]
15/// ```
16pub trait MsgDataBound:
17 Clone + Debug + DeserializeOwned + MsgKey + PartialEq + Send + Serialize + Sync
18{
19 // Перечисление, содержащее названия всех сервисов
20 // type TService: ServiceBound;
21
22 // Разрешенные маршруты сообщения
23 // fn define_enabled_routes(&self) -> MsgRoute<Self::TService> {
24 // MsgRoute::default()
25 // }
26
27 /// Задать ограничение времени жизни сообщения
28 ///
29 /// # Примеры
30 ///
31 /// Все сообщения без ограничения по времени
32 ///
33 /// ```rust
34 /// impl MsgDataBound for Custom {
35 /// fn define_time_to_live(&self) -> TimeToLiveValue {
36 /// TimeToLiveValue::Infinite
37 /// }
38 /// }
39 /// ```
40 fn define_time_to_live(&self) -> TimeToLiveValue {
41 TimeToLiveValue::Infinite
42 }
43}
44
45#[derive(Default)]
46/// Разрешенный маршрут передачи сообщений
47pub enum MsgRoute<TService> {
48 /// Можно передавать из заданного сервиса всем остальным
49 SrcToAny(TService),
50 /// Можно передавать только между заданными сервисами
51 SrcToDst(TService, TService),
52 /// Можно передавать только между заданными сервисами, заданными в массиве
53 SrcToDstSeveral(Vec<(TService, TService)>),
54 /// Можно передавать между всеми сервисами
55 #[default]
56 AnyToAny,
57 /// Сообщение нельзя передавать
58 None,
59}