use codec::{Decode, Encode};
use pezkuwi_pez_node_primitives::ErasureChunk;
use pezkuwi_primitives::{
CandidateHash, CommittedCandidateReceiptV2 as CommittedCandidateReceipt, Hash, Id as ParaId,
PersistedValidationData, UncheckedSignedStatement, ValidatorIndex,
};
use super::{v1, IsRequest, Protocol};
use crate::v3::StatementFilter;
#[derive(Debug, Clone, Encode, Decode)]
pub struct AttestedCandidateRequest {
pub candidate_hash: CandidateHash,
pub mask: StatementFilter,
}
#[derive(Debug, Clone, Encode, Decode)]
pub struct AttestedCandidateResponse {
pub candidate_receipt: CommittedCandidateReceipt,
pub persisted_validation_data: PersistedValidationData,
pub statements: Vec<UncheckedSignedStatement>,
}
impl IsRequest for AttestedCandidateRequest {
type Response = AttestedCandidateResponse;
const PROTOCOL: Protocol = Protocol::AttestedCandidateV2;
}
pub type CollationFetchingResponse = super::v1::CollationFetchingResponse;
#[derive(Debug, Clone, Encode, Decode)]
pub struct CollationFetchingRequest {
pub relay_parent: Hash,
pub para_id: ParaId,
pub candidate_hash: CandidateHash,
}
impl IsRequest for CollationFetchingRequest {
type Response = CollationFetchingResponse;
const PROTOCOL: Protocol = Protocol::CollationFetchingV2;
}
#[derive(Debug, Copy, Clone, Encode, Decode)]
pub struct ChunkFetchingRequest {
pub candidate_hash: CandidateHash,
pub index: ValidatorIndex,
}
#[derive(Debug, Clone, Encode, Decode)]
pub enum ChunkFetchingResponse {
#[codec(index = 0)]
Chunk(ErasureChunk),
#[codec(index = 1)]
NoSuchChunk,
}
impl From<Option<ErasureChunk>> for ChunkFetchingResponse {
fn from(x: Option<ErasureChunk>) -> Self {
match x {
Some(c) => ChunkFetchingResponse::Chunk(c),
None => ChunkFetchingResponse::NoSuchChunk,
}
}
}
impl From<ChunkFetchingResponse> for Option<ErasureChunk> {
fn from(x: ChunkFetchingResponse) -> Self {
match x {
ChunkFetchingResponse::Chunk(c) => Some(c),
ChunkFetchingResponse::NoSuchChunk => None,
}
}
}
impl From<v1::ChunkFetchingRequest> for ChunkFetchingRequest {
fn from(v1::ChunkFetchingRequest { candidate_hash, index }: v1::ChunkFetchingRequest) -> Self {
Self { candidate_hash, index }
}
}
impl From<ChunkFetchingRequest> for v1::ChunkFetchingRequest {
fn from(ChunkFetchingRequest { candidate_hash, index }: ChunkFetchingRequest) -> Self {
Self { candidate_hash, index }
}
}
impl IsRequest for ChunkFetchingRequest {
type Response = ChunkFetchingResponse;
const PROTOCOL: Protocol = Protocol::ChunkFetchingV2;
}