use crate::{
collection::NewestUnitResponse,
units::{UncheckedSignedUnit, UnitCoord},
Data, Hasher, NodeIndex, Signature, UncheckedSigned,
};
use codec::{Decode, Encode};
#[derive(Clone, Eq, PartialEq, Debug, Decode, Encode)]
pub enum UnitMessage<H: Hasher, D: Data, S: Signature> {
Unit(UncheckedSignedUnit<H, D, S>),
CoordRequest(NodeIndex, UnitCoord),
ParentsRequest(NodeIndex, H::Hash),
ParentsResponse(H::Hash, Vec<UncheckedSignedUnit<H, D, S>>),
NewestRequest(NodeIndex, u64),
NewestResponse(UncheckedSigned<NewestUnitResponse<H, D, S>, S>),
}
impl<H: Hasher, D: Data, S: Signature> UnitMessage<H, D, S> {
pub fn included_data(&self) -> Vec<D> {
use UnitMessage::*;
match self {
Unit(uu) => uu.as_signable().included_data(),
ParentsResponse(_, units) => units
.iter()
.flat_map(|uu| uu.as_signable().included_data())
.collect(),
NewestResponse(response) => response.as_signable().included_data(),
NewestRequest(_, _) | CoordRequest(_, _) | ParentsRequest(_, _) => Vec::new(),
}
}
}