Skip to main content

hotshot_new_protocol/message/
fetch.rs

1use hotshot_types::{data::ViewNumber, vote::HasViewNumber};
2use serde::{Deserialize, Serialize};
3
4#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Hash, Eq)]
5pub struct Request<T> {
6    view: ViewNumber,
7    body: T,
8}
9
10impl<T> Request<T> {
11    pub fn new(view: ViewNumber, body: T) -> Self {
12        Self { view, body }
13    }
14
15    pub fn body(&self) -> &T {
16        &self.body
17    }
18
19    pub fn into_body(self) -> T {
20        self.body
21    }
22}
23
24#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Hash, Eq)]
25pub struct Response<T> {
26    view: ViewNumber,
27    body: T,
28}
29
30impl<T> Response<T> {
31    pub fn new(view: ViewNumber, body: T) -> Self {
32        Self { view, body }
33    }
34
35    pub fn body(&self) -> &T {
36        &self.body
37    }
38
39    pub fn into_body(self) -> T {
40        self.body
41    }
42}
43
44impl<T> HasViewNumber for Request<T> {
45    fn view_number(&self) -> ViewNumber {
46        self.view
47    }
48}
49
50impl<T> HasViewNumber for Response<T> {
51    fn view_number(&self) -> ViewNumber {
52        self.view
53    }
54}