pub trait EncodeLike<T = Self>: Encode where
    T: Encode
{ }
Expand description

A marker trait that tells the compiler that a type encode to the same representation as another type.

E.g. Vec<u8> has the same encoded representation as &[u8].

Example

fn encode_like<T: Encode, R: EncodeLike<T>>(data: &R) {
    data.encode(); // Valid `T` encoded value.
}

fn main() {
    // Just pass the a reference to the normal tuple.
    encode_like::<(u32, u32), _>(&(1u32, 2u32));
    // Pass a tuple of references
    encode_like::<(u32, u32), _>(&(&1u32, &2u32));
    // Pass a tuple of a reference and a value.
    encode_like::<(u32, u32), _>(&(&1u32, 2u32));
}

Warning

The relation is not symetric, T implements EncodeLike<U> does not mean U has same representation as T. For instance we could imaging a non zero integer to be encoded to the same representation as the said integer but not the other way around.

Limitation

Not all possible implementations of EncodeLike are implemented (for instance Box<Box<u32>> does not implement EncodeLike<u32>). To bypass this issue either open a PR to add the new combination or use Ref reference wrapper or define your own wrapper and implement EncodeLike on it as such:

fn encode_like<T: Encode, R: EncodeLike<T>>(data: &R) {
    data.encode(); // Valid `T` encoded value.
}

struct MyWrapper<'a>(&'a (Box<Box<u32>>, u32));
impl<'a> core::ops::Deref for MyWrapper<'a> { // Or use derive_deref crate
    type Target = (Box<Box<u32>>, u32);
    fn deref(&self) -> &Self::Target { &self.0 }
}

impl<'a> parity_scale_codec::WrapperTypeEncode for MyWrapper<'a> {}
impl<'a> parity_scale_codec::EncodeLike<(u32, u32)> for MyWrapper<'a> {}

fn main() {
    let v = (Box::new(Box::new(0)), 0);
    encode_like::<(u32, u32), _>(&MyWrapper(&v));
}

Implementations on Foreign Types

impl EncodeLike<Entry> for Entry

Implementors

impl<T: Form> EncodeLike<ExtrinsicMetadata<T>> for ExtrinsicMetadata<T> where
    T::Type: Encode,
    T::Type: Encode,
    Vec<SignedExtensionMetadata<T>>: Encode,
    Vec<SignedExtensionMetadata<T>>: Encode

impl<T: Form> EncodeLike<SignedExtensionMetadata<T>> for SignedExtensionMetadata<T> where
    T::String: Encode,
    T::String: Encode,
    T::Type: Encode,
    T::Type: Encode,
    T::Type: Encode,
    T::Type: Encode

impl<T: Form> EncodeLike<PalletStorageMetadata<T>> for PalletStorageMetadata<T> where
    T::String: Encode,
    T::String: Encode,
    Vec<StorageEntryMetadata<T>>: Encode,
    Vec<StorageEntryMetadata<T>>: Encode

impl<T: Form> EncodeLike<StorageEntryMetadata<T>> for StorageEntryMetadata<T> where
    T::String: Encode,
    T::String: Encode,
    StorageEntryType<T>: Encode,
    StorageEntryType<T>: Encode,
    Vec<T::String>: Encode,
    Vec<T::String>: Encode

impl<T: Form> EncodeLike<StorageEntryType<T>> for StorageEntryType<T> where
    T::Type: Encode,
    T::Type: Encode,
    T::Type: Encode,
    T::Type: Encode,
    T::Type: Encode,
    T::Type: Encode

impl<T: Form> EncodeLike<PalletCallMetadata<T>> for PalletCallMetadata<T> where
    T::Type: Encode,
    T::Type: Encode

impl<T: Form> EncodeLike<PalletEventMetadata<T>> for PalletEventMetadata<T> where
    T::Type: Encode,
    T::Type: Encode

impl<T: Form> EncodeLike<PalletConstantMetadata<T>> for PalletConstantMetadata<T> where
    T::String: Encode,
    T::String: Encode,
    T::Type: Encode,
    T::Type: Encode,
    Vec<T::String>: Encode,
    Vec<T::String>: Encode

impl<T: Form> EncodeLike<PalletErrorMetadata<T>> for PalletErrorMetadata<T> where
    T::Type: Encode,
    T::Type: Encode

impl<T: Config + Send + Sync> EncodeLike<CheckGenesis<T>> for CheckGenesis<T> where
    PhantomData<T>: Encode,
    PhantomData<T>: Encode

impl<T: Config + Send + Sync> EncodeLike<CheckMortality<T>> for CheckMortality<T> where
    PhantomData<T>: Encode,
    PhantomData<T>: Encode

impl<T: Config> EncodeLike<CheckNonce<T>> for CheckNonce<T> where
    T::Index: HasCompact

impl<T: Config + Send + Sync> EncodeLike<CheckSpecVersion<T>> for CheckSpecVersion<T> where
    PhantomData<T>: Encode,
    PhantomData<T>: Encode

impl<T: Config + Send + Sync> EncodeLike<CheckTxVersion<T>> for CheckTxVersion<T> where
    PhantomData<T>: Encode,
    PhantomData<T>: Encode

impl<T: Config + Send + Sync> EncodeLike<CheckWeight<T>> for CheckWeight<T> where
    PhantomData<T>: Encode,
    PhantomData<T>: Encode

impl<T: Config> EncodeLike<Event<T>> for Event<T> where
    T::AccountId: Encode,
    T::AccountId: Encode,
    T::AccountId: Encode,
    T::AccountId: Encode,
    T::AccountId: Encode,
    T::AccountId: Encode,
    T::Hash: Encode,
    T::Hash: Encode

impl<T: Config> EncodeLike<Call<T>> for Call<T>

impl<E: Parameter + Member, T> EncodeLike<EventRecord<E, T>> for EventRecord<E, T> where
    E: Encode,
    E: Encode,
    Vec<T>: Encode,
    Vec<T>: Encode

impl<AccountId> EncodeLike<RawOrigin<AccountId>> for RawOrigin<AccountId> where
    AccountId: Encode,
    AccountId: Encode

impl<Index, AccountData> EncodeLike<AccountInfo<Index, AccountData>> for AccountInfo<Index, AccountData> where
    Index: Encode,
    Index: Encode,
    AccountData: Encode,
    AccountData: Encode

impl<T: Config> EncodeLike<Event<T>> for Event<T> where
    <T as Config>::AccountId: Encode,
    <T as Config>::AccountId: Encode

impl<T: Config> EncodeLike<Call<T>> for Call<T>

impl<T: Config> EncodeLike<Event<T>> for Event<T> where
    T::AccountId: Encode,
    T::AccountId: Encode,
    T::Hash: Encode,
    T::Hash: Encode

impl<T: Config> EncodeLike<Call<T>> for Call<T>

impl<T: Config<I>, I: 'static> EncodeLike<Event<T, I>> for Event<T, I> where
    T::AccountId: Encode,
    T::AccountId: Encode,
    T::Balance: Encode,
    T::Balance: Encode,
    T::AccountId: Encode,
    T::AccountId: Encode,
    T::Balance: Encode,
    T::Balance: Encode,
    T::AccountId: Encode,
    T::AccountId: Encode,
    T::AccountId: Encode,
    T::AccountId: Encode,
    T::Balance: Encode,
    T::Balance: Encode,
    T::AccountId: Encode,
    T::AccountId: Encode,
    T::Balance: Encode,
    T::Balance: Encode,
    T::Balance: Encode,
    T::Balance: Encode,
    T::AccountId: Encode,
    T::AccountId: Encode,
    T::Balance: Encode,
    T::Balance: Encode,
    T::AccountId: Encode,
    T::AccountId: Encode,
    T::Balance: Encode,
    T::Balance: Encode,
    T::AccountId: Encode,
    T::AccountId: Encode,
    T::AccountId: Encode,
    T::AccountId: Encode,
    T::Balance: Encode,
    T::Balance: Encode,
    T::AccountId: Encode,
    T::AccountId: Encode,
    T::Balance: Encode,
    T::Balance: Encode,
    T::AccountId: Encode,
    T::AccountId: Encode,
    T::Balance: Encode,
    T::Balance: Encode,
    T::AccountId: Encode,
    T::AccountId: Encode,
    T::Balance: Encode,
    T::Balance: Encode

impl<T: Config<I>, I: 'static> EncodeLike<Call<T, I>> for Call<T, I>

impl<Balance> EncodeLike<BalanceLock<Balance>> for BalanceLock<Balance> where
    Balance: Encode,
    Balance: Encode

impl<ReserveIdentifier, Balance> EncodeLike<ReserveData<ReserveIdentifier, Balance>> for ReserveData<ReserveIdentifier, Balance> where
    ReserveIdentifier: Encode,
    ReserveIdentifier: Encode,
    Balance: Encode,
    Balance: Encode

impl<Balance> EncodeLike<AccountData<Balance>> for AccountData<Balance> where
    Balance: Encode,
    Balance: Encode,
    Balance: Encode,
    Balance: Encode,
    Balance: Encode,
    Balance: Encode,
    Balance: Encode,
    Balance: Encode

impl<T: Config<I>, I: 'static> EncodeLike<Event<T, I>> for Event<T, I> where
    T::AccountId: Encode,
    T::AccountId: Encode,
    T::Balance: Encode,
    T::Balance: Encode,
    T::AccountId: Encode,
    T::AccountId: Encode,
    T::Balance: Encode,
    T::Balance: Encode,
    T::AccountId: Encode,
    T::AccountId: Encode,
    T::AccountId: Encode,
    T::AccountId: Encode,
    T::Balance: Encode,
    T::Balance: Encode,
    T::AccountId: Encode,
    T::AccountId: Encode,
    T::Balance: Encode,
    T::Balance: Encode,
    T::Balance: Encode,
    T::Balance: Encode,
    T::AccountId: Encode,
    T::AccountId: Encode,
    T::Balance: Encode,
    T::Balance: Encode,
    T::AccountId: Encode,
    T::AccountId: Encode,
    T::Balance: Encode,
    T::Balance: Encode,
    T::AccountId: Encode,
    T::AccountId: Encode,
    T::AccountId: Encode,
    T::AccountId: Encode,
    T::Balance: Encode,
    T::Balance: Encode,
    T::AccountId: Encode,
    T::AccountId: Encode,
    T::Balance: Encode,
    T::Balance: Encode,
    T::AccountId: Encode,
    T::AccountId: Encode,
    T::Balance: Encode,
    T::Balance: Encode,
    T::AccountId: Encode,
    T::AccountId: Encode,
    T::Balance: Encode,
    T::Balance: Encode

impl<T: Config<I>, I: 'static> EncodeLike<Call<T, I>> for Call<T, I>

impl<Balance> EncodeLike<BalanceLock<Balance>> for BalanceLock<Balance> where
    Balance: Encode,
    Balance: Encode

impl<ReserveIdentifier, Balance> EncodeLike<ReserveData<ReserveIdentifier, Balance>> for ReserveData<ReserveIdentifier, Balance> where
    ReserveIdentifier: Encode,
    ReserveIdentifier: Encode,
    Balance: Encode,
    Balance: Encode

impl<Balance> EncodeLike<AccountData<Balance>> for AccountData<Balance> where
    Balance: Encode,
    Balance: Encode,
    Balance: Encode,
    Balance: Encode,
    Balance: Encode,
    Balance: Encode,
    Balance: Encode,
    Balance: Encode

impl<T: Config> EncodeLike<Event<T>> for Event<T> where
    T::Hash: Encode,
    T::Hash: Encode,
    T::Hash: Encode,
    T::Hash: Encode

impl<T: Config> EncodeLike<Call<T>> for Call<T>

impl<T: Config> EncodeLike<Event<T>> for Event<T>

impl<Balance, BlockNumber> EncodeLike<EscrowedAmount<Balance, BlockNumber>> for EscrowedAmount<Balance, BlockNumber> where
    Balance: Encode,
    Balance: Encode,
    BlockNumber: Encode,
    BlockNumber: Encode

impl<T: Config> EncodeLike<Call<T>> for Call<T>

impl<T: Config> EncodeLike<Event<T>> for Event<T> where
    T::AccountId: Encode,
    T::AccountId: Encode

impl<T: Config> EncodeLike<Call<T>> for Call<T>

impl<T: Config> EncodeLike<Event<T>> for Event<T> where
    T::Hash: Encode,
    T::Hash: Encode,
    T::Hash: Encode,
    T::Hash: Encode,
    T::Hash: Encode,
    T::Hash: Encode,
    T::Hash: Encode,
    T::Hash: Encode,
    T::Hash: Encode,
    T::Hash: Encode,
    T::Hash: Encode,
    T::Hash: Encode,
    T::Hash: Encode,
    T::Hash: Encode,
    T::Hash: Encode,
    T::Hash: Encode

impl<T: Config> EncodeLike<Call<T>> for Call<T>

impl<T: Config> EncodeLike<Event<T>> for Event<T> where
    T::AccountId: Encode,
    T::AccountId: Encode,
    T::Hash: Encode,
    T::Hash: Encode,
    T::Hash: Encode,
    T::Hash: Encode,
    T::Hash: Encode,
    T::Hash: Encode,
    T::Hash: Encode,
    T::Hash: Encode,
    T::Hash: Encode,
    T::Hash: Encode

impl<T: Config> EncodeLike<Call<T>> for Call<T>

impl<T: Config> EncodeLike<Call<T>> for Call<T>

impl<T: Config> EncodeLike<Event<T>> for Event<T> where
    T::Hash: Encode,
    T::Hash: Encode,
    T::AccountId: Encode,
    T::AccountId: Encode,
    T::Hash: Encode,
    T::Hash: Encode,
    T::AccountId: Encode,
    T::AccountId: Encode,
    T::AccountId: Encode,
    T::AccountId: Encode,
    T::Hash: Encode,
    T::Hash: Encode,
    T::AccountId: Encode,
    T::AccountId: Encode,
    T::AccountId: Encode,
    T::AccountId: Encode,
    T::Hash: Encode,
    T::Hash: Encode,
    T::AccountId: Encode,
    T::AccountId: Encode

impl<T: Config> EncodeLike<Call<T>> for Call<T>

impl<T: Config> EncodeLike<Event<T>> for Event<T> where
    T::Hash: Encode,
    T::Hash: Encode,
    T::AccountId: Encode,
    T::AccountId: Encode,
    T::Hash: Encode,
    T::Hash: Encode,
    T::AccountId: Encode,
    T::AccountId: Encode,
    T::Hash: Encode,
    T::Hash: Encode,
    T::AccountId: Encode,
    T::AccountId: Encode,
    T::AccountId: Encode,
    T::AccountId: Encode,
    T::AccountId: Encode,
    T::AccountId: Encode,
    T::AccountId: Encode,
    T::AccountId: Encode,
    T::Hash: Encode,
    T::Hash: Encode,
    T::AccountId: Encode,
    T::AccountId: Encode,
    T::Hash: Encode,
    T::Hash: Encode

impl<T: Config> EncodeLike<Call<T>> for Call<T>

impl<T: Config> EncodeLike<Call<T>> for Call<T>

impl<Balance> EncodeLike<InclusionFee<Balance>> for InclusionFee<Balance> where
    Balance: Encode,
    Balance: Encode,
    Balance: Encode,
    Balance: Encode,
    Balance: Encode,
    Balance: Encode

impl<Balance> EncodeLike<FeeDetails<Balance>> for FeeDetails<Balance> where
    Option<InclusionFee<Balance>>: Encode,
    Option<InclusionFee<Balance>>: Encode,
    Balance: Encode,
    Balance: Encode

impl<Balance> EncodeLike<RuntimeDispatchInfo<Balance>> for RuntimeDispatchInfo<Balance> where
    Balance: Encode,
    Balance: Encode

impl<T: Config> EncodeLike<Call<T>> for Call<T>

impl<T: Config> EncodeLike<Call<T>> for Call<T>

impl<T: Config> EncodeLike<Event<T>> for Event<T>

impl<T: Config> EncodeLike<Call<T>> for Call<T>

impl EncodeLike<U128> for U128

impl EncodeLike<U256> for U256

impl EncodeLike<U512> for U512

impl EncodeLike<H128> for H128

impl EncodeLike<H160> for H160

impl EncodeLike<H256> for H256

impl EncodeLike<H512> for H512

impl<T> EncodeLike<UntrackedSymbol<T>> for UntrackedSymbol<T> where
    PhantomData<fn() -> T>: Encode,
    PhantomData<fn() -> T>: Encode

impl<T: Form> EncodeLike<TypeDefComposite<T>> for TypeDefComposite<T> where
    Vec<Field<T>>: Encode,
    Vec<Field<T>>: Encode

impl<T: Form> EncodeLike<Field<T>> for Field<T> where
    Option<T::String>: Encode,
    Option<T::String>: Encode,
    T::Type: Encode,
    T::Type: Encode,
    Option<T::String>: Encode,
    Option<T::String>: Encode,
    Vec<T::String>: Encode,
    Vec<T::String>: Encode

impl<T: Form> EncodeLike<Path<T>> for Path<T> where
    Vec<T::String>: Encode,
    Vec<T::String>: Encode

impl<T: Form> EncodeLike<TypeDefVariant<T>> for TypeDefVariant<T> where
    Vec<Variant<T>>: Encode,
    Vec<Variant<T>>: Encode

impl<T: Form> EncodeLike<Variant<T>> for Variant<T> where
    T::String: Encode,
    T::String: Encode,
    Vec<Field<T>>: Encode,
    Vec<Field<T>>: Encode,
    Vec<T::String>: Encode,
    Vec<T::String>: Encode

impl<T: Form> EncodeLike<Type<T>> for Type<T> where
    Path<T>: Encode,
    Path<T>: Encode,
    Vec<TypeParameter<T>>: Encode,
    Vec<TypeParameter<T>>: Encode,
    TypeDef<T>: Encode,
    TypeDef<T>: Encode,
    Vec<T::String>: Encode,
    Vec<T::String>: Encode

impl<T: Form> EncodeLike<TypeParameter<T>> for TypeParameter<T> where
    T::String: Encode,
    T::String: Encode,
    Option<T::Type>: Encode,
    Option<T::Type>: Encode

impl<T: Form> EncodeLike<TypeDef<T>> for TypeDef<T> where
    TypeDefComposite<T>: Encode,
    TypeDefComposite<T>: Encode,
    TypeDefVariant<T>: Encode,
    TypeDefVariant<T>: Encode,
    TypeDefSequence<T>: Encode,
    TypeDefSequence<T>: Encode,
    TypeDefArray<T>: Encode,
    TypeDefArray<T>: Encode,
    TypeDefTuple<T>: Encode,
    TypeDefTuple<T>: Encode,
    TypeDefCompact<T>: Encode,
    TypeDefCompact<T>: Encode,
    TypeDefBitSequence<T>: Encode,
    TypeDefBitSequence<T>: Encode

impl<T: Form> EncodeLike<TypeDefArray<T>> for TypeDefArray<T> where
    T::Type: Encode,
    T::Type: Encode

impl<T: Form> EncodeLike<TypeDefTuple<T>> for TypeDefTuple<T> where
    Vec<T::Type>: Encode,
    Vec<T::Type>: Encode

impl<T: Form> EncodeLike<TypeDefSequence<T>> for TypeDefSequence<T> where
    T::Type: Encode,
    T::Type: Encode

impl<T: Form> EncodeLike<TypeDefCompact<T>> for TypeDefCompact<T> where
    T::Type: Encode,
    T::Type: Encode

impl<T: Form> EncodeLike<TypeDefBitSequence<T>> for TypeDefBitSequence<T> where
    T::Type: Encode,
    T::Type: Encode,
    T::Type: Encode,
    T::Type: Encode

impl EncodeLike<Void> for Void

impl<E> EncodeLike<MakeFatalError<E>> for MakeFatalError<E> where
    E: Encode,
    E: Encode

impl<T: Encode + Decode> EncodeLike<Crossing<T>> for Crossing<T> where
    T: Encode,
    T: Encode

impl<Block: BlockT> EncodeLike<BlockId<Block>> for BlockId<Block> where
    Block::Hash: Encode,
    Block::Hash: Encode,
    NumberFor<Block>: Encode,
    NumberFor<Block>: Encode

impl<Header, Extrinsic: MaybeSerialize> EncodeLike<Block<Header, Extrinsic>> for Block<Header, Extrinsic> where
    Header: Encode,
    Header: Encode,
    Vec<Extrinsic>: Encode,
    Vec<Extrinsic>: Encode

impl<Block> EncodeLike<SignedBlock<Block>> for SignedBlock<Block> where
    Block: Encode,
    Block: Encode

impl<'a> EncodeLike<DigestItemRef<'a>> for DigestItemRef<'a>

impl EncodeLike<Era> for Era

impl<Number: Copy + Into<U256> + TryFrom<U256>, Hash: HashT> EncodeLike<Header<Number, Hash>> for Header<Number, Hash> where
    Hash::Output: Encode,
    Hash::Output: Encode,
    Hash::Output: Encode,
    Hash::Output: Encode,
    Hash::Output: Encode,
    Hash::Output: Encode,
    Number: HasCompact

impl<Call, Extra> EncodeLike<SignedPayload<Call, Extra>> for SignedPayload<Call, Extra> where
    Call: Encode,
    Extra: SignedExtension

impl<Address, Call, Signature, Extra> EncodeLike<UncheckedExtrinsic<Address, Call, Signature, Extra>> for UncheckedExtrinsic<Address, Call, Signature, Extra> where
    Address: Encode,
    Signature: Encode,
    Call: Encode,
    Extra: SignedExtension

impl<AccountId, AccountIndex> EncodeLike<MultiAddress<AccountId, AccountIndex>> for MultiAddress<AccountId, AccountIndex> where
    AccountId: Encode,
    AccountId: Encode,
    AccountIndex: HasCompact

impl EncodeLike<Time> for Time

impl<Xt> EncodeLike<ExtrinsicWrapper<Xt>> for ExtrinsicWrapper<Xt> where
    Xt: Encode,
    Xt: Encode

impl<Xt> EncodeLike<Block<Xt>> for Block<Xt> where
    Vec<Xt>: Encode,
    Vec<Xt>: Encode

impl<Call, Extra> EncodeLike<TestXt<Call, Extra>> for TestXt<Call, Extra> where
    Option<(u64, Extra)>: Encode,
    Option<(u64, Extra)>: Encode,
    Call: Encode,
    Call: Encode

impl<Info> EncodeLike<DispatchErrorWithPostInfo<Info>> for DispatchErrorWithPostInfo<Info> where
    Info: Eq + PartialEq + Clone + Copy + Encode + Decode + Printable,
    Info: Encode,
    Info: Encode

impl<Reporter, Offender> EncodeLike<OffenceDetails<Reporter, Offender>> for OffenceDetails<Reporter, Offender> where
    Offender: Encode,
    Offender: Encode,
    Vec<Reporter>: Encode,
    Vec<Reporter>: Encode

impl EncodeLike<Cogs> for Cogs

impl EncodeLike<A> for A

impl EncodeLike<L> for L

impl EncodeLike<E> for E

impl EncodeLike<I> for I

impl EncodeLike<X> for X

impl EncodeLike<P> for P

impl EncodeLike<B> for B

impl<AccountId, Hash, BlockNumber> EncodeLike<Record<AccountId, Hash, BlockNumber>> for Record<AccountId, Hash, BlockNumber> where
    AccountId: Encode,
    AccountId: Encode,
    AccountId: Encode,
    AccountId: Encode,
    Hash: Encode,
    Hash: Encode,
    BlockNumber: Encode,
    BlockNumber: Encode,
    BlockNumber: Encode,
    BlockNumber: Encode

impl<Hash> EncodeLike<TxKeysT<Hash>> for TxKeysT<Hash> where
    Hash: Encode,
    Hash: Encode

impl<AccountId> EncodeLike<OrderHeader<AccountId>> for OrderHeader<AccountId> where
    AccountId: Encode,
    AccountId: Encode,
    AccountId: Encode,
    AccountId: Encode,
    AccountId: Encode,
    AccountId: Encode

impl<Hash> EncodeLike<OrderItem<Hash>> for OrderItem<Hash> where
    Hash: Encode,
    Hash: Encode

impl<Hash> EncodeLike<TxKeysL<Hash>> for TxKeysL<Hash> where
    Hash: Encode,
    Hash: Encode,
    Hash: Encode,
    Hash: Encode,
    Hash: Encode,
    Hash: Encode,
    Hash: Encode,
    Hash: Encode

impl<Hash> EncodeLike<TxKeysM<Hash>> for TxKeysM<Hash> where
    Hash: Encode,
    Hash: Encode,
    Hash: Encode,
    Hash: Encode,
    Hash: Encode,
    Hash: Encode

impl<Hash> EncodeLike<TxKeysS<Hash>> for TxKeysS<Hash> where
    Hash: Encode,
    Hash: Encode,
    Hash: Encode,
    Hash: Encode

impl<AccountId, ProjectStatus> EncodeLike<DeletedProject<AccountId, ProjectStatus>> for DeletedProject<AccountId, ProjectStatus> where
    AccountId: Encode,
    AccountId: Encode,
    AccountId: Encode,
    AccountId: Encode,
    ProjectStatus: Encode,
    ProjectStatus: Encode

impl<AccountId, ReferenceHash, NumberOfBlocks, LockStatus, StatusOfTimeRecord, ReasonCodeStruct, PostingPeriod, StartOrEndBlockNumber, NumberOfBreaks> EncodeLike<Timekeeper<AccountId, ReferenceHash, NumberOfBlocks, LockStatus, StatusOfTimeRecord, ReasonCodeStruct, PostingPeriod, StartOrEndBlockNumber, NumberOfBreaks>> for Timekeeper<AccountId, ReferenceHash, NumberOfBlocks, LockStatus, StatusOfTimeRecord, ReasonCodeStruct, PostingPeriod, StartOrEndBlockNumber, NumberOfBreaks> where
    AccountId: Encode,
    AccountId: Encode,
    ReferenceHash: Encode,
    ReferenceHash: Encode,
    NumberOfBlocks: Encode,
    NumberOfBlocks: Encode,
    LockStatus: Encode,
    LockStatus: Encode,
    ReasonCodeStruct: Encode,
    ReasonCodeStruct: Encode,
    StatusOfTimeRecord: Encode,
    StatusOfTimeRecord: Encode,
    ReasonCodeStruct: Encode,
    ReasonCodeStruct: Encode,
    PostingPeriod: Encode,
    PostingPeriod: Encode,
    StartOrEndBlockNumber: Encode,
    StartOrEndBlockNumber: Encode,
    StartOrEndBlockNumber: Encode,
    StartOrEndBlockNumber: Encode,
    NumberOfBreaks: Encode,
    NumberOfBreaks: Encode

impl<T> EncodeLike<Set<T>> for Set<T> where
    Vec<T>: Encode,
    Vec<T>: Encode