Skip to content

Commit

Permalink
Added workaround trait for compiler bug
Browse files Browse the repository at this point in the history
  • Loading branch information
ToufeeqP committed Aug 31, 2023
1 parent 4fa5b54 commit a185f93
Show file tree
Hide file tree
Showing 3 changed files with 43 additions and 10 deletions.
23 changes: 21 additions & 2 deletions core/src/da_block.rs
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
#[cfg(feature = "std")]
use std::fmt;

use crate::traits::{ExtendedBlock, ExtendedHeader};
use crate::traits::{DaHeaderProvider, ExtendedBlock, ExtendedHeader};
use codec::{Codec, Decode, Encode};
#[cfg(feature = "serde")]
use serde::{Deserialize, Serialize};
Expand Down Expand Up @@ -146,5 +146,24 @@ where
>,
Extrinsic: Member + Codec + traits::Extrinsic + MaybeSerializeDeserialize,
{
type Header = Header;
type DaHeader = Header;
}

impl<Header, Extrinsic, Extension>
DaHeaderProvider<
<Header as sp_runtime::traits::Header>::Number,
<Header as sp_runtime::traits::Header>::Hash,
sp_runtime::Digest,
Extension,
> for DaBlock<Header, Extrinsic>
where
Header: HeaderT
+ ExtendedHeader<
<Header as sp_runtime::traits::Header>::Number,
<Header as sp_runtime::traits::Header>::Hash,
sp_runtime::Digest,
Extension,
>,
{
type DaHeader = Header;
}
5 changes: 3 additions & 2 deletions core/src/traits.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
use codec::{Codec, Decode};
use sp_arithmetic::traits::AtLeast32BitUnsigned;
use sp_arithmetic::traits::Saturating;
use sp_arithmetic::traits::{AtLeast32BitUnsigned, Saturating};
use sp_core::U256;
use sp_std::{convert::TryFrom, fmt::Debug, hash::Hash as StdHash};

Expand All @@ -10,7 +9,9 @@ pub use get_app_id::*;
pub mod extended_header;
pub use extended_header::*;

#[cfg(feature = "runtime")]
pub mod extended_block;
#[cfg(feature = "runtime")]
pub use extended_block::*;

/// Header block number trait.
Expand Down
25 changes: 19 additions & 6 deletions core/src/traits/extended_block.rs
Original file line number Diff line number Diff line change
@@ -1,19 +1,32 @@
#[cfg(feature = "runtime")]
use crate::traits::ExtendedHeader;
#[cfg(feature = "runtime")]
use sp_runtime::{
traits::{Block, Header},
Digest,
};

/// Extended block trait that extends Block to include ExtendedHeader in the header
#[cfg(feature = "runtime")]
pub trait ExtendedBlock<Extension>: Block {
type Header: Header<Hash = Self::Hash>
/// Extended Block trait that extends substrate primitive Block to include ExtendedHeader in the header
pub trait ExtendedBlock<Extension>:
Block
+ DaHeaderProvider<
<<Self as Block>::Header as Header>::Number,
<<Self as Block>::Header as Header>::Hash,
Digest,
Extension,
DaHeader = <Self as ExtendedBlock<Extension>>::DaHeader,
>
{
type DaHeader: Header<Hash = Self::Hash>
+ ExtendedHeader<
<<Self as Block>::Header as Header>::Number,
<<Self as Block>::Header as Header>::Hash,
Digest,
Extension,
>;
}

// Note: This is a workaround for a compiler bug (https://github.com/rust-lang/rust/issues/96634)
// and should be removed when the compiler bug is fixed.
pub trait DaHeaderProvider<Number, Hash, Digest, Extension> {
/// DaHeader type.
type DaHeader: ExtendedHeader<Number, Hash, Digest, Extension>;
}

0 comments on commit a185f93

Please sign in to comment.