Trait frame_support::dispatch::marker::StructuralEq [−][src]
pub trait StructuralEq { }structural_match)Expand description
Required trait for constants used in pattern matches.
Any type that derives Eq automatically implements this trait, regardless
of whether its type parameters implement Eq.
This is a hack to work around a limitation in our type system.
Background
We want to require that types of consts used in pattern matches
have the attribute #[derive(PartialEq, Eq)].
In a more ideal world, we could check that requirement by just checking that
the given type implements both the StructuralPartialEq trait and
the Eq trait. However, you can have ADTs that do derive(PartialEq, Eq),
and be a case that we want the compiler to accept, and yet the constant’s
type fails to implement Eq.
Namely, a case like this:
#[derive(PartialEq, Eq)] struct Wrap<X>(X); fn higher_order(_: &()) { } const CFN: Wrap<fn(&())> = Wrap(higher_order); fn main() { match CFN { CFN => {} _ => {} } }
(The problem in the above code is that Wrap<fn(&())> does not implement
PartialEq, nor Eq, because for<'a> fn(&'a _) does not implement those
traits.)
Therefore, we cannot rely on naive check for StructuralPartialEq and
mere Eq.
As a hack to work around this, we use two separate traits injected by each
of the two derives (#[derive(PartialEq)] and #[derive(Eq)]) and check
that both of them are present as part of structural-match checking.
Implementations on Foreign Types
impl StructuralEq for OptionBoolimpl<T> StructuralEq for Compact<T>impl StructuralEq for Errorimpl StructuralEq for Errorimpl<'t> StructuralEq for Match<'t>impl<'t> StructuralEq for Match<'t>impl StructuralEq for Matchimpl StructuralEq for MatchKindimpl StructuralEq for MatchKindimpl StructuralEq for ClassBytesRangeimpl StructuralEq for WithCommentsimpl StructuralEq for ClassPerlimpl StructuralEq for LiteralKindimpl StructuralEq for Utf8Sequenceimpl StructuralEq for ClassUnicodeRangeimpl StructuralEq for ClassUnicodeKindimpl StructuralEq for Repetitionimpl StructuralEq for Classimpl StructuralEq for ClassUnicodeimpl StructuralEq for ClassUnicodeimpl StructuralEq for ClassSetItemimpl StructuralEq for SetFlagsimpl StructuralEq for Literalimpl StructuralEq for Astimpl StructuralEq for Flagimpl StructuralEq for ErrorKindimpl StructuralEq for Assertionimpl StructuralEq for Commentimpl StructuralEq for RepetitionRangeimpl StructuralEq for Errorimpl StructuralEq for ClassSetRangeimpl StructuralEq for Anchorimpl StructuralEq for ClassPerlKindimpl StructuralEq for Groupimpl StructuralEq for Spanimpl StructuralEq for HirKindimpl StructuralEq for ClassSetUnionimpl StructuralEq for Literalimpl StructuralEq for Positionimpl StructuralEq for RepetitionOpimpl StructuralEq for ClassAsciiKindimpl StructuralEq for Hirimpl StructuralEq for ErrorKindimpl StructuralEq for Errorimpl StructuralEq for CaptureNameimpl StructuralEq for AssertionKindimpl StructuralEq for FlagsItemKindimpl StructuralEq for ClassUnicodeOpKindimpl StructuralEq for Utf8Rangeimpl StructuralEq for RepetitionKindimpl StructuralEq for Classimpl StructuralEq for SpecialLiteralKindimpl StructuralEq for RepetitionRangeimpl StructuralEq for ClassBracketedimpl StructuralEq for ClassBytesimpl StructuralEq for GroupKindimpl StructuralEq for Flagsimpl StructuralEq for Literalimpl StructuralEq for Groupimpl StructuralEq for Errorimpl StructuralEq for ClassAsciiimpl StructuralEq for FlagsItemimpl StructuralEq for Literalsimpl StructuralEq for WordBoundaryimpl StructuralEq for Repetitionimpl StructuralEq for HexLiteralKindimpl StructuralEq for ClassSetBinaryOpKindimpl StructuralEq for Concatimpl StructuralEq for ClassSetimpl StructuralEq for ClassSetBinaryOpimpl StructuralEq for Alternationimpl StructuralEq for RepetitionKindimpl StructuralEq for GroupKindimpl StructuralEq for WaitTimeoutResultimpl StructuralEq for OnceStateimpl StructuralEq for UnparkTokenimpl StructuralEq for RequeueOpimpl StructuralEq for ParkTokenimpl StructuralEq for UnparkResultimpl StructuralEq for ParkResultimpl StructuralEq for FilterOpimpl StructuralEq for LittleEndianimpl StructuralEq for BigEndianimpl StructuralEq for ValueTypeimpl StructuralEq for Signatureimpl StructuralEq for BrTableDataimpl StructuralEq for Typeimpl StructuralEq for BlockTypeimpl StructuralEq for FunctionTypeimpl StructuralEq for ValueTypeimpl StructuralEq for Instructionimpl StructuralEq for StartedWithimpl StructuralEq for Wordsimpl StructuralEq for Wordsimpl StructuralEq for Pagesimpl StructuralEq for Pagesimpl StructuralEq for Bytesimpl StructuralEq for Errnoimpl StructuralEq for Errorimpl StructuralEq for U256impl StructuralEq for U128impl StructuralEq for U512impl StructuralEq for FromStrRadixErrKindimpl<U> StructuralEq for PInt<U> where
U: Unsigned + NonZero, impl<U> StructuralEq for NInt<U> where
U: Unsigned + NonZero, impl StructuralEq for Lessimpl StructuralEq for Greaterimpl StructuralEq for Z0impl StructuralEq for UTermimpl StructuralEq for ATermimpl<U, B> StructuralEq for UInt<U, B>impl StructuralEq for B1impl StructuralEq for Equalimpl<V, A> StructuralEq for TArr<V, A>impl StructuralEq for B0impl StructuralEq for IsNormalizedimpl StructuralEq for InvalidKeyLengthimpl StructuralEq for MacErrorimpl StructuralEq for Signatureimpl StructuralEq for Affineimpl StructuralEq for Messageimpl StructuralEq for PublicKeyimpl StructuralEq for SecretKeyimpl StructuralEq for Scalarimpl StructuralEq for Errorimpl StructuralEq for RecoveryIdimpl StructuralEq for Jacobianimpl StructuralEq for AffineStorageimpl StructuralEq for MacErrorimpl StructuralEq for InvalidKeyLengthimpl StructuralEq for u32x4impl StructuralEq for Errorimpl StructuralEq for PublicKeyimpl StructuralEq for VRFProofimpl StructuralEq for RistrettoBothimpl StructuralEq for ChainCodeimpl StructuralEq for Commitmentimpl StructuralEq for ECQVCertPublicimpl StructuralEq for VRFProofBatchableimpl StructuralEq for VRFOutputimpl StructuralEq for Signatureimpl StructuralEq for VRFInOutimpl StructuralEq for Cosignatureimpl<K> StructuralEq for ExtendedKey<K>impl StructuralEq for MultiSignatureStageimpl StructuralEq for SignatureErrorimpl StructuralEq for PublicKeyimpl StructuralEq for TryReserveErrorimpl<T> StructuralEq for AllowStdIo<T>impl StructuralEq for Abortedimpl<T, E> StructuralEq for TryChunksError<T, E>impl StructuralEq for PollNextimpl StructuralEq for Canceledimpl<T> StructuralEq for TrySendError<T>impl StructuralEq for SendErrorimpl<D> StructuralEq for OwnedNode<D> where
D: Borrow<[u8]>, impl<HO> StructuralEq for Record<HO>impl<'a> StructuralEq for NodeHandle<'a>impl<T, E> StructuralEq for TrieError<T, E>impl StructuralEq for NibbleVecimpl<HO, CE> StructuralEq for Error<HO, CE>impl StructuralEq for NibbleSlicePlanimpl StructuralEq for NodeHandlePlanimpl<'a> StructuralEq for Node<'a>impl StructuralEq for NodePlanimpl<T> StructuralEq for MemCounter<T>impl<T> StructuralEq for NoopTracker<T>impl StructuralEq for DwMacroimpl StructuralEq for DwLnctimpl StructuralEq for Registerimpl StructuralEq for DwIdimpl StructuralEq for Augmentationimpl StructuralEq for ColumnTypeimpl StructuralEq for DwLleimpl StructuralEq for DwTagimpl StructuralEq for BaseAddressesimpl<R, Offset> StructuralEq for FrameDescriptionEntry<R, Offset> where
R: Reader<Offset = Offset>,
Offset: ReaderOffset, impl StructuralEq for DwUtimpl<T> StructuralEq for ArangeEntry<T> where
T: Copy, impl<T> StructuralEq for DebugLineStrOffset<T>impl StructuralEq for DwAtimpl<T> StructuralEq for DebugStrOffset<T>impl<T> StructuralEq for DebugLocListsBase<T>impl StructuralEq for DwCfaimpl StructuralEq for ReaderOffsetIdimpl<Offset> StructuralEq for UnitType<Offset> where
Offset: ReaderOffset, impl StructuralEq for Rangeimpl StructuralEq for DwVisimpl StructuralEq for DwCcimpl StructuralEq for DwoIdimpl StructuralEq for Pointerimpl StructuralEq for DwLnsimpl StructuralEq for DwAteimpl StructuralEq for BigEndianimpl<T> StructuralEq for DebugAbbrevOffset<T>impl StructuralEq for DwDscimpl<T> StructuralEq for DebugMacroOffset<T>impl StructuralEq for FileEntryFormatimpl<R> StructuralEq for RegisterRule<R> where
R: Reader, impl StructuralEq for DwarfFileTypeimpl<T> StructuralEq for DieReference<T>impl StructuralEq for DwChildrenimpl StructuralEq for DwAccessimpl StructuralEq for DwDsimpl<R> StructuralEq for CfaRule<R> where
R: Reader, impl StructuralEq for DwLneimpl<T> StructuralEq for DebugStrOffsetsBase<T>impl<R, Offset> StructuralEq for Operation<R, Offset> where
R: Reader<Offset = Offset>,
Offset: ReaderOffset, impl<R> StructuralEq for DebugFrame<R> where
R: Reader, impl<R> StructuralEq for LocationListEntry<R> where
R: Reader, impl<T> StructuralEq for DebugAddrIndex<T>impl<R, Offset> StructuralEq for CompleteLineProgram<R, Offset> where
R: Reader<Offset = Offset>,
Offset: ReaderOffset, impl<R, Offset> StructuralEq for FileEntry<R, Offset> where
R: Reader<Offset = Offset>,
Offset: ReaderOffset, impl<T> StructuralEq for UnitOffset<T>impl StructuralEq for Abbreviationimpl StructuralEq for DwOpimpl<T> StructuralEq for DebugMacinfoOffset<T>impl StructuralEq for SectionIdimpl StructuralEq for Encodingimpl StructuralEq for RunTimeEndianimpl<R> StructuralEq for Expression<R> where
R: Reader, impl<R> StructuralEq for Attribute<R> where
R: Reader, impl<T> StructuralEq for RangeListsOffset<T>impl StructuralEq for DwDefaultedimpl<'bases, Section, R> StructuralEq for PartialFrameDescriptionEntry<'bases, Section, R> where
R: Reader,
Section: UnwindSection<R>, impl StructuralEq for DwEndimpl StructuralEq for LittleEndianimpl StructuralEq for DwEhPeimpl StructuralEq for DwVirtualityimpl<T> StructuralEq for DebugLineOffset<T>impl StructuralEq for DwInlimpl<R, Offset> StructuralEq for LineProgramHeader<R, Offset> where
R: Reader<Offset = Offset>,
Offset: ReaderOffset, impl StructuralEq for DwOrdimpl<T> StructuralEq for DebugStrOffsetsIndex<T>impl StructuralEq for LineEncodingimpl<T> StructuralEq for DebugFrameOffset<T>impl StructuralEq for LineRowimpl StructuralEq for Formatimpl<T> StructuralEq for DebugTypesOffset<T>impl StructuralEq for DwAddrimpl<T> StructuralEq for LocationListsOffset<T>impl<R, Offset> StructuralEq for LineInstruction<R, Offset> where
R: Reader<Offset = Offset>,
Offset: ReaderOffset, impl<T> StructuralEq for DebugInfoOffset<T>impl StructuralEq for AttributeSpecificationimpl<T> StructuralEq for DebugLocListsIndex<T>impl<R> StructuralEq for CallFrameInstruction<R> where
R: Reader, impl StructuralEq for SectionBaseAddressesimpl StructuralEq for DwIdximpl<T> StructuralEq for DebugRngListsIndex<T>impl<R> StructuralEq for UnwindContext<R> where
R: Reader, impl StructuralEq for DwRleimpl StructuralEq for DebugTypeSignatureimpl<T> StructuralEq for DebugRngListsBase<T>impl<R> StructuralEq for EhFrame<R> where
R: Reader, impl<T> StructuralEq for EhFrameOffset<T>impl<R> StructuralEq for UnwindTableRow<R> where
R: Reader, impl<T> StructuralEq for DebugAddrBase<T>impl<R> StructuralEq for EhFrameHdr<R> where
R: Reader, impl StructuralEq for DwLangimpl<R, Offset> StructuralEq for UnitHeader<R, Offset> where
R: Reader<Offset = Offset>,
Offset: ReaderOffset, impl<R, Offset> StructuralEq for AttributeValue<R, Offset> where
R: Reader<Offset = Offset>,
Offset: ReaderOffset, impl StructuralEq for DwFormimpl<'bases, Section, R> StructuralEq for CieOrFde<'bases, Section, R> where
R: Reader,
Section: UnwindSection<R>, impl StructuralEq for Errorimpl<T> StructuralEq for UnitSectionOffset<T>impl<R, Offset> StructuralEq for CommonInformationEntry<R, Offset> where
R: Reader<Offset = Offset>,
Offset: ReaderOffset, impl<'input, Endian> StructuralEq for EndianSlice<'input, Endian> where
Endian: Endianity, impl<R, Offset> StructuralEq for IncompleteLineProgram<R, Offset> where
R: Reader<Offset = Offset>,
Offset: ReaderOffset, impl StructuralEq for ValueTypeimpl<Section> StructuralEq for SymbolFlags<Section>impl StructuralEq for SymbolIndeximpl StructuralEq for Architectureimpl<E> StructuralEq for U32Bytes<E> where
E: Endian, impl<'data> StructuralEq for CompressedData<'data>impl<E> StructuralEq for I64Bytes<E> where
E: Endian, impl StructuralEq for Endiannessimpl StructuralEq for ComdatKindimpl<E> StructuralEq for U16Bytes<E> where
E: Endian, impl StructuralEq for FileFlagsimpl<'data> StructuralEq for SymbolMapName<'data>impl<'data> StructuralEq for Bytes<'data>impl StructuralEq for Errorimpl<'data> StructuralEq for Export<'data>impl StructuralEq for BigEndianimpl StructuralEq for SymbolScopeimpl StructuralEq for RelocationEncodingimpl StructuralEq for RelocationKindimpl<E> StructuralEq for I16Bytes<E> where
E: Endian, impl StructuralEq for SymbolSectionimpl<E> StructuralEq for I32Bytes<E> where
E: Endian, impl StructuralEq for RelocationTargetimpl StructuralEq for BinaryFormatimpl StructuralEq for AddressSizeimpl StructuralEq for CompressionFormatimpl StructuralEq for SectionFlagsimpl<'data> StructuralEq for Import<'data>impl StructuralEq for ArchiveKindimpl StructuralEq for LittleEndianimpl StructuralEq for SectionIndeximpl StructuralEq for SectionKindimpl StructuralEq for SymbolKindimpl<'data> StructuralEq for ObjectMapEntry<'data>impl<E> StructuralEq for U64Bytes<E> where
E: Endian, impl StructuralEq for StreamResultimpl StructuralEq for TINFLStatusimpl StructuralEq for MZErrorimpl StructuralEq for TDEFLFlushimpl StructuralEq for DataFormatimpl StructuralEq for MZFlushimpl StructuralEq for CompressionStrategyimpl StructuralEq for TDEFLStatusimpl StructuralEq for CompressionLevelimpl StructuralEq for MZStatusimpl<Info> StructuralEq for DispatchErrorWithPostInfo<Info> where
Info: Eq + PartialEq<Info> + Clone + Copy + Encode + Decode + Printable, impl<Header, Extrinsic> StructuralEq for Block<Header, Extrinsic> where
Extrinsic: MaybeSerialize, impl<Number, Hash> StructuralEq for Header<Number, Hash> where
Hash: Hash,
Number: Copy + Into<U256> + TryFrom<U256>, impl<Address, Call, Signature, Extra> StructuralEq for UncheckedExtrinsic<Address, Call, Signature, Extra> where
Extra: SignedExtension, Implementors
impl<A: AssetId, B: Balance, OnDrop: HandleImbalanceDrop<A, B>, OppositeOnDrop: HandleImbalanceDrop<A, B>> StructuralEq for frame_support::traits::tokens::fungibles::Imbalance<A, B, OnDrop, OppositeOnDrop>impl<B: Balance, OnDrop: HandleImbalanceDrop<B>, OppositeOnDrop: HandleImbalanceDrop<B>> StructuralEq for frame_support::traits::tokens::fungible::Imbalance<B, OnDrop, OppositeOnDrop>