fedimint_hbbft/subset/
message.rs1use rand::distributions::{Distribution, Standard};
2use rand::Rng;
3use rand_derive::Rand;
4use serde::{Deserialize, Serialize};
5
6use crate::binary_agreement;
7use crate::broadcast;
8
9#[derive(Serialize, Deserialize, Clone, Debug)]
11pub struct Message<N> {
12 pub proposer_id: N,
14 pub content: MessageContent,
16}
17
18impl<N> Distribution<Message<N>> for Standard
19where
20 Standard: Distribution<N>,
21{
22 fn sample<R: Rng + ?Sized>(&self, rng: &mut R) -> Message<N> {
23 Message {
24 proposer_id: rng.gen::<N>(),
25 content: rng.gen::<MessageContent>(),
26 }
27 }
28}
29
30#[derive(Serialize, Deserialize, Clone, Debug, Rand)]
32pub enum MessageContent {
33 Broadcast(broadcast::Message),
35 Agreement(binary_agreement::Message),
37}
38
39impl MessageContent {
40 pub(super) fn with<N>(self, proposer_id: N) -> Message<N> {
42 Message {
43 proposer_id,
44 content: self,
45 }
46 }
47}