subspace_networking/protocols/request_response/handlers/
segment_header.rs

1//! Helper for incoming segment header requests.
2//!
3//! Handle (i.e. answer) incoming segment headers requests from a remote peer received via
4//! `RequestResponsesBehaviour` with generic [`GenericRequestHandler`].
5
6use super::generic_request_handler::{GenericRequest, GenericRequestHandler};
7use parity_scale_codec::{Decode, Encode};
8use std::sync::Arc;
9use subspace_core_primitives::segments::{SegmentHeader, SegmentIndex};
10
11/// Segment header by segment indexes protocol request.
12#[derive(Debug, Clone, Eq, PartialEq, Encode, Decode)]
13pub enum SegmentHeaderRequest {
14    /// Segment headers by segment indexes.
15    SegmentIndexes {
16        /// Segment indexes to get.
17        // TODO: Use `Arc<[SegmentIndex]>` once
18        //  https://github.com/paritytech/parity-scale-codec/issues/633 is resolved
19        segment_indexes: Arc<Vec<SegmentIndex>>,
20    },
21    /// Defines how many segment headers to return, segments will be in ascending order.
22    LastSegmentHeaders {
23        /// Number of segment headers to return.
24        limit: u32,
25    },
26}
27
28impl GenericRequest for SegmentHeaderRequest {
29    const PROTOCOL_NAME: &'static str = "/subspace/segment-headers-by-indexes/0.1.0";
30    const LOG_TARGET: &'static str = "segment-headers-by-indexes-request-response-handler";
31    type Response = SegmentHeaderResponse;
32}
33
34/// Segment header by segment indexes protocol response.
35#[derive(Debug, PartialEq, Eq, Clone, Encode, Decode)]
36pub struct SegmentHeaderResponse {
37    /// Returned data.
38    pub segment_headers: Vec<SegmentHeader>,
39}
40
41/// Create a new segment-header-by-segment-indexes request handler.
42pub type SegmentHeaderBySegmentIndexesRequestHandler = GenericRequestHandler<SegmentHeaderRequest>;