Skip to main content

hotshot_new_protocol/message/
payload.rs

1use hotshot_types::{
2    data::{VidCommitment2, ViewNumber},
3    vote::HasViewNumber,
4};
5use serde::{Deserialize, Serialize};
6
7use crate::message::fetch::{Request, Response};
8
9pub type PayloadFetchRequest = Request<PayloadRequestBody>;
10pub type PayloadFetchResponse = Response<PayloadResponseBody>;
11
12#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Hash, Eq)]
13pub struct PayloadRequestBody;
14
15#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Hash, Eq)]
16pub enum PayloadResponseBody {
17    NotAvailable,
18    TooLarge,
19    Payload {
20        commitment: VidCommitment2,
21        #[serde(with = "serde_bytes")]
22        data: Vec<u8>,
23    },
24}
25
26#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Hash, Eq)]
27pub enum PayloadFetchMessage {
28    Req(PayloadFetchRequest),
29    Res(PayloadFetchResponse),
30}
31
32impl HasViewNumber for PayloadFetchMessage {
33    fn view_number(&self) -> ViewNumber {
34        match self {
35            Self::Req(r) => r.view_number(),
36            Self::Res(r) => r.view_number(),
37        }
38    }
39}