use super::{
ticket::TicketClaim, vrf::VrfSignature, AuthorityId, AuthorityIndex, AuthoritySignature,
EpochConfiguration, Randomness, Slot, SASSAFRAS_ENGINE_ID,
};
use codec::{Decode, Encode, MaxEncodedLen};
use scale_info::TypeInfo;
use crate::runtime::DigestItem;
#[cfg(not(feature = "std"))]
use alloc::vec::Vec;
#[derive(Clone, Debug, Encode, Decode, MaxEncodedLen, TypeInfo)]
pub struct SlotClaim {
pub authority_idx: AuthorityIndex,
pub slot: Slot,
pub vrf_signature: VrfSignature,
pub ticket_claim: Option<TicketClaim>,
}
#[derive(Clone, PartialEq, Eq, Encode, Decode, Debug)]
pub struct NextEpochDescriptor {
pub randomness: Randomness,
pub authorities: Vec<AuthorityId>,
pub config: Option<EpochConfiguration>,
}
#[derive(Decode, Encode, Clone, PartialEq, Eq)]
pub enum ConsensusLog {
#[codec(index = 1)]
NextEpochData(NextEpochDescriptor),
#[codec(index = 2)]
OnDisabled(AuthorityIndex),
}
impl TryFrom<&DigestItem> for SlotClaim {
type Error = ();
fn try_from(item: &DigestItem) -> Result<Self, Self::Error> {
item.pre_runtime_try_to(&SASSAFRAS_ENGINE_ID).ok_or(())
}
}
impl From<&SlotClaim> for DigestItem {
fn from(claim: &SlotClaim) -> Self {
DigestItem::PreRuntime(SASSAFRAS_ENGINE_ID, claim.encode())
}
}
impl TryFrom<&DigestItem> for AuthoritySignature {
type Error = ();
fn try_from(item: &DigestItem) -> Result<Self, Self::Error> {
item.seal_try_to(&SASSAFRAS_ENGINE_ID).ok_or(())
}
}
impl From<&AuthoritySignature> for DigestItem {
fn from(signature: &AuthoritySignature) -> Self {
DigestItem::Seal(SASSAFRAS_ENGINE_ID, signature.encode())
}
}