asteroid_mq_model/
proposal.rs1use 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}