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}