asteroid_mq_model/
proposal.rs

1use std::collections::HashMap;
2
3use serde::{Deserialize, Serialize};
4use typeshare::typeshare;
5
6use crate::{
7    endpoint::EndpointAddr,
8    interest::Interest,
9    message::{MessageId, MessageStatusKind},
10    topic::TopicCode,
11};
12
13#[derive(Debug, Clone, Serialize, Deserialize)]
14#[cfg_attr(feature = "bincode", derive(bincode::Decode, bincode::Encode))]
15#[typeshare]
16pub struct EndpointInterest {
17    pub topic_code: TopicCode,
18    pub endpoint: EndpointAddr,
19    pub interests: Vec<Interest>,
20}
21
22#[derive(Debug, Clone, Serialize, Deserialize)]
23#[cfg_attr(feature = "bincode", derive(bincode::Decode, bincode::Encode))]
24#[typeshare]
25pub struct SetState {
26    pub topic: TopicCode,
27    pub update: MessageStateUpdate,
28}
29
30#[derive(Debug, Clone, Serialize, Deserialize)]
31#[cfg_attr(feature = "bincode", derive(bincode::Decode, bincode::Encode))]
32#[typeshare]
33pub struct MessageStateUpdate {
34    pub message_id: MessageId,
35    pub status: HashMap<EndpointAddr, MessageStatusKind>,
36}
37
38impl MessageStateUpdate {
39    pub fn new(message_id: MessageId, status: HashMap<EndpointAddr, MessageStatusKind>) -> Self {
40        Self { message_id, status }
41    }
42    pub fn new_empty(message_id: MessageId) -> Self {
43        Self {
44            message_id,
45            status: HashMap::new(),
46        }
47    }
48}