use crate::{justification, InitializationData};
use bp_runtime::HeaderOf;
use codec::{Decode, Encode};
use frame_support::{weights::Weight, DebugNoBound};
use scale_info::TypeInfo;
use sp_consensus_grandpa::SetId;
use sp_runtime::traits::{Header as HeaderT, Zero};
use sp_std::{boxed::Box, fmt::Debug};
#[derive(Encode, Decode, Debug, PartialEq, Eq, Clone, TypeInfo)]
#[allow(non_camel_case_types)]
pub enum BridgeGrandpaCall<Header: HeaderT> {
#[codec(index = 0)]
submit_finality_proof {
finality_target: Box<Header>,
justification: justification::GrandpaJustification<Header>,
},
#[codec(index = 1)]
initialize {
init_data: InitializationData<Header>,
},
#[codec(index = 4)]
submit_finality_proof_ex {
finality_target: Box<Header>,
justification: justification::GrandpaJustification<Header>,
current_set_id: SetId,
},
}
pub type BridgeGrandpaCallOf<C> = BridgeGrandpaCall<HeaderOf<C>>;
#[derive(Copy, Clone, PartialEq, DebugNoBound)]
pub struct SubmitFinalityProofInfo<N: Debug> {
pub block_number: N,
pub current_set_id: Option<SetId>,
pub is_mandatory: bool,
pub is_free_execution_expected: bool,
pub extra_weight: Weight,
pub extra_size: u32,
}
impl<N: Debug> SubmitFinalityProofInfo<N> {
pub fn fits_limits(&self) -> bool {
self.extra_weight.is_zero() && self.extra_size.is_zero()
}
}