hotshot_query_service/fetching/
request.rs1use std::{fmt::Debug, hash::Hash};
16
17use derive_more::{From, Into};
18use hotshot_types::{data::VidCommitment, traits::node_implementation::NodeType};
19
20use crate::{
21 availability::{LeafHash, LeafQueryData, QcHash, StateCertQueryData},
22 Payload, VidCommon,
23};
24
25pub trait Request<Types>: Copy + Debug + Eq + Hash + Send {
27 type Response: Clone + Send;
29}
30
31#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
33pub struct PayloadRequest(pub VidCommitment);
34
35impl<Types: NodeType> Request<Types> for PayloadRequest {
36 type Response = Payload<Types>;
37}
38
39#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
41pub struct VidCommonRequest(pub VidCommitment);
42
43impl<Types: NodeType> Request<Types> for VidCommonRequest {
44 type Response = VidCommon;
45}
46
47#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, From, Into)]
52pub struct LeafRequest<Types: NodeType> {
53 pub height: u64,
54 pub expected_leaf: LeafHash<Types>,
55 pub expected_qc: QcHash<Types>,
56}
57
58impl<Types: NodeType> LeafRequest<Types> {
59 pub fn new(height: u64, expected_leaf: LeafHash<Types>, expected_qc: QcHash<Types>) -> Self {
60 Self {
61 height,
62 expected_leaf,
63 expected_qc,
64 }
65 }
66}
67
68impl<Types: NodeType> Request<Types> for LeafRequest<Types> {
69 type Response = LeafQueryData<Types>;
70}
71
72#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, From, Into)]
74pub struct StateCertRequest(pub u64);
75
76impl<Types: NodeType> Request<Types> for StateCertRequest {
77 type Response = StateCertQueryData<Types>;
78}