use tet_core::Pair;
use tp_consensus_aura::AURA_ENGINE_ID;
use tp_runtime::generic::{DigestItem, OpaqueDigestItemId};
use tp_consensus_slots::Slot;
use codec::{Encode, Codec};
use std::fmt::Debug;
type Signature<P> = <P as Pair>::Signature;
pub trait CompatibleDigestItem<P: Pair>: Sized {
fn aura_seal(signature: Signature<P>) -> Self;
fn as_aura_seal(&self) -> Option<Signature<P>>;
fn aura_pre_digest(slot: Slot) -> Self;
fn as_aura_pre_digest(&self) -> Option<Slot>;
}
impl<P, Hash> CompatibleDigestItem<P> for DigestItem<Hash> where
P: Pair,
Signature<P>: Codec,
Hash: Debug + Send + Sync + Eq + Clone + Codec + 'static
{
fn aura_seal(signature: Signature<P>) -> Self {
DigestItem::Seal(AURA_ENGINE_ID, signature.encode())
}
fn as_aura_seal(&self) -> Option<Signature<P>> {
self.try_to(OpaqueDigestItemId::Seal(&AURA_ENGINE_ID))
}
fn aura_pre_digest(slot: Slot) -> Self {
DigestItem::PreRuntime(AURA_ENGINE_ID, slot.encode())
}
fn as_aura_pre_digest(&self) -> Option<Slot> {
self.try_to(OpaqueDigestItemId::PreRuntime(&AURA_ENGINE_ID))
}
}