[−][src]Trait frame_support::dispatch::marker::StructuralEq
structural_match
)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 workaround 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 (1.) the StructuralPartialEq
trait and
(2.) 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 SeekFrom
[src]
impl StructuralEq for NulError
[src]
impl<'a> StructuralEq for Component<'a>
[src]
impl StructuralEq for Output
[src]
impl StructuralEq for RecvTimeoutError
[src]
impl StructuralEq for VarError
[src]
impl StructuralEq for StripPrefixError
[src]
impl StructuralEq for Instant
[src]
impl StructuralEq for Permissions
[src]
impl<T> StructuralEq for SendError<T>
[src]
impl StructuralEq for ThreadId
[src]
impl StructuralEq for SystemTime
[src]
impl StructuralEq for IpAddr
[src]
impl StructuralEq for RecvError
[src]
impl StructuralEq for SocketAddr
[src]
impl<'a> StructuralEq for Prefix<'a>
[src]
impl<T> StructuralEq for TrySendError<T>
[src]
impl StructuralEq for ErrorKind
[src]
impl StructuralEq for FileType
[src]
impl StructuralEq for BacktraceStatus
[src]
impl StructuralEq for AccessError
[src]
impl StructuralEq for TryRecvError
[src]
impl StructuralEq for ExitStatus
[src]
impl StructuralEq for FromBytesWithNulError
[src]
impl StructuralEq for Ipv6MulticastScope
[src]
impl<T> StructuralEq for Cursor<T>
[src]
impl StructuralEq for CString
[src]
impl StructuralEq for IntoStringError
[src]
impl StructuralEq for Shutdown
[src]
impl<'a> StructuralEq for PrefixComponent<'a>
[src]
impl StructuralEq for AddrParseError
[src]
impl StructuralEq for WaitTimeoutResult
[src]
impl StructuralEq for CharTryFromError
[src]
impl StructuralEq for NonZeroI64
[src]
impl StructuralEq for DecodeUtf16Error
[src]
impl StructuralEq for UnicodeVersion
[src]
impl StructuralEq for CpuidResult
[src]
impl StructuralEq for FpCategory
[src]
impl StructuralEq for NonZeroU128
[src]
impl StructuralEq for LayoutErr
[src]
impl<Idx> StructuralEq for RangeToInclusive<Idx>
[src]
impl StructuralEq for IntErrorKind
[src]
impl StructuralEq for Duration
[src]
impl StructuralEq for NonZeroI16
[src]
impl StructuralEq for ParseFloatError
[src]
impl StructuralEq for TryFromIntError
[src]
impl<T> StructuralEq for ManuallyDrop<T> where
T: ?Sized,
[src]
T: ?Sized,
impl StructuralEq for SearchStep
[src]
impl<T> StructuralEq for Reverse<T>
[src]
impl StructuralEq for RangeFull
[src]
impl<T> StructuralEq for Bound<T>
[src]
impl StructuralEq for AllocErr
[src]
impl StructuralEq for ParseBoolError
[src]
impl StructuralEq for Utf8Error
[src]
impl<T> StructuralEq for Poll<T>
[src]
impl StructuralEq for Layout
[src]
impl<Idx> StructuralEq for RangeFrom<Idx>
[src]
impl StructuralEq for NonZeroUsize
[src]
impl<Idx> StructuralEq for RangeTo<Idx>
[src]
impl<T> StructuralEq for Wrapping<T>
[src]
impl StructuralEq for NonZeroU64
[src]
impl StructuralEq for NonZeroI8
[src]
impl StructuralEq for NonZeroU16
[src]
impl StructuralEq for CannotReallocInPlace
[src]
impl StructuralEq for NoneError
[src]
impl StructuralEq for ParseCharError
[src]
impl StructuralEq for TypeId
[src]
impl StructuralEq for NonZeroIsize
[src]
impl StructuralEq for Ordering
[src]
impl StructuralEq for NonZeroU8
[src]
impl StructuralEq for NonZeroI32
[src]
impl<T> StructuralEq for Option<T>
[src]
impl<'a> StructuralEq for Utf8LossyChunk<'a>
[src]
impl<Idx> StructuralEq for Range<Idx>
[src]
impl StructuralEq for ParseIntError
[src]
impl StructuralEq for NonZeroU32
[src]
impl<Y, R> StructuralEq for GeneratorState<Y, R>
[src]
impl StructuralEq for NonZeroI128
[src]
impl StructuralEq for String
[src]
impl StructuralEq for TryReserveError
[src]
impl<T> StructuralEq for BTreeSet<T>
[src]
impl StructuralEq for PrintFmt
[src]
impl StructuralEq for CollectionAllocErr
[src]
impl StructuralEq for LevelFilter
[src]
impl StructuralEq for Level
[src]
impl StructuralEq for Id
[src]
impl StructuralEq for Kind
[src]
impl<T> StructuralEq for Compact<T>
[src]
impl StructuralEq for OptionBool
[src]
impl StructuralEq for Error
[src]
impl<T> StructuralEq for CapacityError<T>
[src]
impl StructuralEq for ExecutionError
[src]
impl StructuralEq for ExecutionStrategy
[src]
impl StructuralEq for StorageProof
[src]
impl<'a> StructuralEq for MetadataBuilder<'a>
[src]
impl StructuralEq for LevelFilter
[src]
impl<'a> StructuralEq for Metadata<'a>
[src]
impl StructuralEq for Level
[src]
impl StructuralEq for OpaqueNetworkState
[src]
impl StructuralEq for HttpError
[src]
impl StructuralEq for HttpRequestId
[src]
impl StructuralEq for OpaquePeerId
[src]
impl StructuralEq for PendingRequest
[src]
impl StructuralEq for LocalizedSignature
[src]
impl StructuralEq for Dummy
[src]
impl StructuralEq for KeyTypeId
[src]
impl StructuralEq for PublicError
[src]
impl StructuralEq for Ss58AddressFormat
[src]
impl StructuralEq for Capabilities
[src]
impl StructuralEq for PublicError
[src]
impl StructuralEq for Duration
[src]
impl StructuralEq for StorageKind
[src]
impl StructuralEq for LocalizedSignature
[src]
impl StructuralEq for PublicError
[src]
impl StructuralEq for Public
[src]
impl StructuralEq for Capability
[src]
impl StructuralEq for ChangesTrieConfiguration
[src]
impl StructuralEq for EnvironmentDefinition
[src]
impl StructuralEq for DeriveJunction
[src]
impl StructuralEq for Entry
[src]
impl StructuralEq for AccountId32
[src]
impl StructuralEq for Public
[src]
impl StructuralEq for ExternEntity
[src]
impl StructuralEq for SecretStringError
[src]
impl StructuralEq for Timestamp
[src]
impl StructuralEq for OpaqueMultiaddr
[src]
impl StructuralEq for Bytes
[src]
impl StructuralEq for HttpRequestStatus
[src]
impl<T> StructuralEq for CapacityError<T>
[src]
impl StructuralEq for LittleEndian
[src]
impl StructuralEq for BigEndian
[src]
impl StructuralEq for ATerm
[src]
impl StructuralEq for Equal
[src]
impl<V, A> StructuralEq for TArr<V, A>
[src]
impl StructuralEq for UTerm
[src]
impl<U> StructuralEq for PInt<U> where
U: NonZero + Unsigned,
[src]
U: NonZero + Unsigned,
impl StructuralEq for Less
[src]
impl StructuralEq for B0
[src]
impl StructuralEq for Z0
[src]
impl<U, B> StructuralEq for UInt<U, B>
[src]
impl<U> StructuralEq for NInt<U> where
U: NonZero + Unsigned,
[src]
U: NonZero + Unsigned,
impl StructuralEq for Greater
[src]
impl StructuralEq for B1
[src]
impl StructuralEq for u32x4
[src]
impl StructuralEq for BernoulliError
[src]
impl StructuralEq for WeightedError
[src]
impl StructuralEq for Error
[src]
impl StructuralEq for OnceState
[src]
impl StructuralEq for WaitTimeoutResult
[src]
impl StructuralEq for RequeueOp
[src]
impl StructuralEq for UnparkResult
[src]
impl StructuralEq for ParkResult
[src]
impl StructuralEq for UnparkToken
[src]
impl StructuralEq for FilterOp
[src]
impl StructuralEq for ParkToken
[src]
impl<'t> StructuralEq for Match<'t>
[src]
impl<'t> StructuralEq for Match<'t>
[src]
impl StructuralEq for Match
[src]
impl StructuralEq for MatchKind
[src]
impl StructuralEq for MatchKind
[src]
impl StructuralEq for Flags
[src]
impl StructuralEq for Error
[src]
impl StructuralEq for ErrorKind
[src]
impl StructuralEq for SetFlags
[src]
impl StructuralEq for WithComments
[src]
impl StructuralEq for Utf8Range
[src]
impl StructuralEq for Comment
[src]
impl StructuralEq for Error
[src]
impl StructuralEq for Anchor
[src]
impl StructuralEq for Group
[src]
impl StructuralEq for ClassSetBinaryOp
[src]
impl StructuralEq for Span
[src]
impl StructuralEq for RepetitionRange
[src]
impl StructuralEq for ClassUnicode
[src]
impl StructuralEq for Class
[src]
impl StructuralEq for Ast
[src]
impl StructuralEq for ClassUnicodeOpKind
[src]
impl StructuralEq for Group
[src]
impl StructuralEq for ClassUnicodeRange
[src]
impl StructuralEq for WordBoundary
[src]
impl StructuralEq for HirKind
[src]
impl StructuralEq for ClassBytesRange
[src]
impl StructuralEq for ClassSet
[src]
impl StructuralEq for ClassPerlKind
[src]
impl StructuralEq for Literal
[src]
impl StructuralEq for RepetitionKind
[src]
impl StructuralEq for ClassUnicode
[src]
impl StructuralEq for Concat
[src]
impl StructuralEq for Class
[src]
impl StructuralEq for ClassBracketed
[src]
impl StructuralEq for RepetitionRange
[src]
impl StructuralEq for ClassBytes
[src]
impl StructuralEq for Assertion
[src]
impl StructuralEq for ClassAscii
[src]
impl StructuralEq for Flag
[src]
impl StructuralEq for ClassUnicodeKind
[src]
impl StructuralEq for GroupKind
[src]
impl StructuralEq for Position
[src]
impl StructuralEq for FlagsItem
[src]
impl StructuralEq for ClassSetRange
[src]
impl StructuralEq for FlagsItemKind
[src]
impl StructuralEq for Error
[src]
impl StructuralEq for ClassAsciiKind
[src]
impl StructuralEq for Utf8Sequence
[src]
impl StructuralEq for ClassSetItem
[src]
impl StructuralEq for RepetitionOp
[src]
impl StructuralEq for Literal
[src]
impl StructuralEq for AssertionKind
[src]
impl StructuralEq for Repetition
[src]
impl StructuralEq for LiteralKind
[src]
impl StructuralEq for Literal
[src]
impl StructuralEq for SpecialLiteralKind
[src]
impl StructuralEq for Hir
[src]
impl StructuralEq for Alternation
[src]
impl StructuralEq for ClassSetBinaryOpKind
[src]
impl StructuralEq for ClassSetUnion
[src]
impl StructuralEq for Literals
[src]
impl StructuralEq for ErrorKind
[src]
impl StructuralEq for HexLiteralKind
[src]
impl StructuralEq for GroupKind
[src]
impl StructuralEq for RepetitionKind
[src]
impl StructuralEq for Repetition
[src]
impl StructuralEq for ClassPerl
[src]
impl StructuralEq for CaptureName
[src]
impl<Z> StructuralEq for Zeroizing<Z> where
Z: Zeroize,
[src]
Z: Zeroize,
impl StructuralEq for ValueType
[src]
impl<T> StructuralEq for Pointer<T> where
T: PointerType,
[src]
T: PointerType,
impl StructuralEq for Signature
[src]
impl StructuralEq for Signature
[src]
impl StructuralEq for ValueType
[src]
impl StructuralEq for Words
[src]
impl StructuralEq for Pages
[src]
impl StructuralEq for Bytes
[src]
impl StructuralEq for Pages
[src]
impl StructuralEq for Words
[src]
impl StructuralEq for Type
[src]
impl StructuralEq for FunctionType
[src]
impl StructuralEq for BrTableData
[src]
impl StructuralEq for BlockType
[src]
impl StructuralEq for Instruction
[src]
impl StructuralEq for ValueType
[src]
impl StructuralEq for StartedWith
[src]
impl StructuralEq for ParseBigIntError
[src]
impl StructuralEq for Sign
[src]
impl<A> StructuralEq for ExtendedGcd<A>
[src]
impl StructuralEq for OwnedChildInfo
[src]
impl StructuralEq for StorageChild
[src]
impl StructuralEq for StorageData
[src]
impl<Hash> StructuralEq for StorageChangeSet<Hash>
[src]
impl StructuralEq for StorageKey
[src]
impl StructuralEq for OwnedChildTrie
[src]
impl StructuralEq for U512
impl StructuralEq for U128
impl StructuralEq for Error
[src]
impl StructuralEq for U256
impl StructuralEq for Error
[src]
impl StructuralEq for MacError
[src]
impl StructuralEq for InvalidKeyLength
[src]
impl StructuralEq for Signature
[src]
impl StructuralEq for ECQVCertPublic
[src]
impl StructuralEq for VRFOutput
[src]
impl StructuralEq for Reveal
[src]
impl<K> StructuralEq for ExtendedKey<K>
[src]
impl StructuralEq for VRFInOut
[src]
impl StructuralEq for ChainCode
[src]
impl StructuralEq for Cosignature
[src]
impl StructuralEq for RistrettoBoth
[src]
impl StructuralEq for SignatureError
[src]
impl StructuralEq for VRFProofBatchable
[src]
impl StructuralEq for Commitment
[src]
impl StructuralEq for PublicKey
[src]
impl StructuralEq for MultiSignatureStage
[src]
impl StructuralEq for VRFProof
[src]
impl StructuralEq for ErrorKind
[src]
impl StructuralEq for CompressedEdwardsY
[src]
impl StructuralEq for CompressedRistretto
[src]
impl StructuralEq for WeightedError
[src]
impl StructuralEq for TimerError
[src]
impl<E> StructuralEq for Compat<E>
[src]
impl StructuralEq for PrintFmt
[src]
impl StructuralEq for OnceState
[src]
impl StructuralEq for WaitTimeoutResult
[src]
impl StructuralEq for FilterOp
[src]
impl StructuralEq for UnparkResult
[src]
impl StructuralEq for ParkToken
[src]
impl StructuralEq for UnparkToken
[src]
impl StructuralEq for RequeueOp
[src]
impl StructuralEq for ParkResult
[src]
impl StructuralEq for CollectionAllocErr
[src]
impl StructuralEq for Error
[src]
impl StructuralEq for Affine
[src]
impl StructuralEq for Scalar
[src]
impl StructuralEq for Signature
[src]
impl StructuralEq for PublicKey
[src]
impl StructuralEq for RecoveryId
[src]
impl StructuralEq for Message
[src]
impl StructuralEq for AffineStorage
[src]
impl StructuralEq for SecretKey
[src]
impl StructuralEq for Jacobian
[src]
impl<D> StructuralEq for SharedSecret<D> where
D: Digest,
[src]
D: Digest,
impl StructuralEq for PublicKey
[src]
impl StructuralEq for Signature
[src]
impl StructuralEq for SignatureError
[src]
impl StructuralEq for CompressedEdwardsY
[src]
impl StructuralEq for CompressedRistretto
[src]
impl StructuralEq for Error
[src]
impl<'a> StructuralEq for Node<'a>
[src]
impl StructuralEq for NibbleVec
[src]
impl<D> StructuralEq for OwnedNode<D> where
D: Borrow<[u8]>,
[src]
D: Borrow<[u8]>,
impl<T, E> StructuralEq for TrieError<T, E>
[src]
impl<'a> StructuralEq for NodeHandle<'a>
[src]
impl StructuralEq for NibbleSlicePlan
[src]
impl<HO> StructuralEq for Record<HO>
[src]
impl StructuralEq for NodePlan
[src]
impl StructuralEq for NodeHandlePlan
[src]
impl StructuralEq for RuntimeMetadataV10
[src]
impl StructuralEq for RuntimeMetadataDeprecated
[src]
impl<Xt> StructuralEq for ExtrinsicWrapper<Xt>
[src]
impl<Hash> StructuralEq for Digest<Hash> where
Hash: Encode + Decode,
[src]
Hash: Encode + Decode,
impl<'a, Hash> StructuralEq for DigestItemRef<'a, Hash> where
Hash: 'a,
[src]
Hash: 'a,
impl<'a> StructuralEq for OpaqueDigestItemId<'a>
[src]
impl StructuralEq for AnySignature
[src]
impl StructuralEq for ModuleId
[src]
impl<Address, Call, Signature, Extra> StructuralEq for UncheckedExtrinsic<Address, Call, Signature, Extra> where
Extra: SignedExtension,
[src]
Extra: SignedExtension,
impl StructuralEq for Era
[src]
impl<Block> StructuralEq for BlockId<Block> where
Block: Block,
[src]
Block: Block,
impl StructuralEq for UnknownTransaction
[src]
impl StructuralEq for PendingRequest
[src]
impl StructuralEq for InvalidTransaction
[src]
impl StructuralEq for OpaqueExtrinsic
[src]
impl StructuralEq for Header
[src]
impl StructuralEq for Headers
[src]
impl StructuralEq for Error
[src]
impl<'a, T> StructuralEq for Request<'a, T>
[src]
impl<Call, Extra> StructuralEq for TestXt<Call, Extra>
[src]
impl<Block> StructuralEq for SignedBlock<Block>
[src]
impl StructuralEq for MultiSigner
[src]
impl StructuralEq for MultiSignature
[src]
impl StructuralEq for ValidTransaction
[src]
impl StructuralEq for BlakeTwo256
[src]
impl<Number, Hash> StructuralEq for Header<Number, Hash> where
Hash: Hash,
Number: Into<U256> + TryFrom<U256> + Copy,
[src]
Hash: Hash,
Number: Into<U256> + TryFrom<U256> + Copy,
impl<Xt> StructuralEq for Block<Xt>
[src]
impl StructuralEq for Method
[src]
impl StructuralEq for UintAuthorityId
[src]
impl<AccountId, Call, Extra> StructuralEq for CheckedExtrinsic<AccountId, Call, Extra>
[src]
impl StructuralEq for TransactionValidityError
[src]
impl<Header, Extrinsic> StructuralEq for Block<Header, Extrinsic> where
Extrinsic: MaybeSerialize,
[src]
Extrinsic: MaybeSerialize,
impl<'a> StructuralEq for PiecewiseLinear<'a>
[src]
impl<Hash> StructuralEq for DigestItem<Hash>
[src]
impl StructuralEq for Public
[src]
impl StructuralEq for Signature
[src]
impl StructuralEq for Public
[src]
impl StructuralEq for Signature
[src]
impl StructuralEq for Perquintill
[src]
impl StructuralEq for Perbill
[src]
impl StructuralEq for Permill
[src]
impl StructuralEq for Percent
[src]
impl StructuralEq for Fixed64
[src]
impl StructuralEq for Rational128
[src]
Loading content...
Implementors
impl StructuralEq for DispatchError
[src]
impl StructuralEq for Void
[src]
impl StructuralEq for RuntimeMetadata
[src]
impl StructuralEq for StorageEntryModifier
[src]
impl StructuralEq for StorageEntryType
[src]
impl StructuralEq for StorageHasher
[src]
impl StructuralEq for ExistenceRequirement
[src]
impl StructuralEq for WithdrawReason
impl StructuralEq for DispatchClass
[src]
impl StructuralEq for frame_support::dispatch::fmt::Error
[src]
impl StructuralEq for PhantomPinned
[src]
impl StructuralEq for ErrorMetadata
[src]
impl StructuralEq for FunctionArgumentMetadata
[src]
impl StructuralEq for FunctionMetadata
[src]
impl StructuralEq for ModuleConstantMetadata
[src]
impl StructuralEq for EventMetadata
[src]
impl StructuralEq for OuterEventMetadata
[src]
impl StructuralEq for ModuleMetadata
[src]
impl StructuralEq for RuntimeMetadataPrefixed
[src]
impl StructuralEq for StorageEntryMetadata
[src]
impl StructuralEq for StorageMetadata
[src]
impl StructuralEq for WithdrawReasons
impl StructuralEq for DispatchInfo
[src]
impl<E> StructuralEq for FnEncode<E> where
E: Encode + 'static,
[src]
E: Encode + 'static,
impl<T> StructuralEq for PhantomData<T> where
T: ?Sized,
[src]
T: ?Sized,