pub trait StructuralEq { }
🔬This is a nightly-only experimental API. (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.

Implementors§

source§

impl StructuralEq for AsciiChar

1.0.0 · source§

impl StructuralEq for origin_studio::std::cmp::Ordering

source§

impl StructuralEq for TryReserveErrorKind

source§

impl StructuralEq for VarError

1.28.0 · source§

impl StructuralEq for origin_studio::std::fmt::Alignment

1.7.0 · source§

impl StructuralEq for IpAddr

source§

impl StructuralEq for Ipv6MulticastScope

1.0.0 · source§

impl StructuralEq for SocketAddr

1.0.0 · source§

impl StructuralEq for FpCategory

1.55.0 · source§

impl StructuralEq for IntErrorKind

source§

impl StructuralEq for Which

source§

impl StructuralEq for SearchStep

1.0.0 · source§

impl StructuralEq for origin_studio::std::sync::atomic::Ordering

source§

impl StructuralEq for rustix::backend::fs::types::Advice

source§

impl StructuralEq for FileType

source§

impl StructuralEq for FlockOperation

source§

impl StructuralEq for rustix::backend::mm::types::Advice

source§

impl StructuralEq for MembarrierCommand

source§

impl StructuralEq for Resource

source§

impl StructuralEq for FutexOperation

source§

impl StructuralEq for TimerfdClockId

source§

impl StructuralEq for ClockId

source§

impl StructuralEq for SeekFrom

source§

impl StructuralEq for Direction

source§

impl StructuralEq for DumpableBehavior

source§

impl StructuralEq for EndianMode

source§

impl StructuralEq for FloatingPointMode

source§

impl StructuralEq for MachineCheckMemoryCorruptionKillPolicy

source§

impl StructuralEq for PTracer

source§

impl StructuralEq for SpeculationFeature

source§

impl StructuralEq for TimeStampCounterReadability

source§

impl StructuralEq for TimingMethod

source§

impl StructuralEq for VirtualMemoryMapAddress

source§

impl StructuralEq for Signal

source§

impl StructuralEq for Capability

source§

impl StructuralEq for CoreSchedulingScope

source§

impl StructuralEq for SecureComputingMode

source§

impl StructuralEq for SysCallUserDispatchFastSwitch

source§

impl StructuralEq for LinkNameSpaceType

source§

impl StructuralEq for bool

source§

impl StructuralEq for char

source§

impl StructuralEq for i8

source§

impl StructuralEq for i16

source§

impl StructuralEq for i32

source§

impl StructuralEq for i64

source§

impl StructuralEq for i128

source§

impl StructuralEq for isize

source§

impl StructuralEq for str

source§

impl StructuralEq for u8

source§

impl StructuralEq for u16

source§

impl StructuralEq for u32

source§

impl StructuralEq for u64

source§

impl StructuralEq for u128

source§

impl StructuralEq for ()

source§

impl StructuralEq for usize

source§

impl StructuralEq for AllocError

1.28.0 · source§

impl StructuralEq for Layout

1.50.0 · source§

impl StructuralEq for LayoutError

1.0.0 · source§

impl StructuralEq for TypeId

1.27.0 · source§

impl StructuralEq for CpuidResult

1.34.0 · source§

impl StructuralEq for CharTryFromError

1.9.0 · source§

impl StructuralEq for DecodeUtf16Error

1.20.0 · source§

impl StructuralEq for ParseCharError

1.59.0 · source§

impl StructuralEq for TryFromCharError

1.57.0 · source§

impl StructuralEq for TryReserveError

1.64.0 · source§

impl StructuralEq for CString

1.64.0 · source§

impl StructuralEq for FromVecWithNulError

1.64.0 · source§

impl StructuralEq for IntoStringError

1.64.0 · source§

impl StructuralEq for NulError

1.0.0 · source§

impl StructuralEq for origin_studio::std::fmt::Error

source§

impl StructuralEq for Assume

1.0.0 · source§

impl StructuralEq for AddrParseError

1.0.0 · source§

impl StructuralEq for Ipv4Addr

1.0.0 · source§

impl StructuralEq for Ipv6Addr

1.0.0 · source§

impl StructuralEq for SocketAddrV4

1.0.0 · source§

impl StructuralEq for SocketAddrV6

1.34.0 · source§

impl StructuralEq for NonZeroI8

1.34.0 · source§

impl StructuralEq for NonZeroI16

1.34.0 · source§

impl StructuralEq for NonZeroI32

1.34.0 · source§

impl StructuralEq for NonZeroI64

1.34.0 · source§

impl StructuralEq for NonZeroI128

1.34.0 · source§

impl StructuralEq for NonZeroIsize

1.28.0 · source§

impl StructuralEq for NonZeroU8

1.28.0 · source§

impl StructuralEq for NonZeroU16

1.28.0 · source§

impl StructuralEq for NonZeroU32

1.28.0 · source§

impl StructuralEq for NonZeroU64

1.28.0 · source§

impl StructuralEq for NonZeroU128

1.28.0 · source§

impl StructuralEq for NonZeroUsize

1.0.0 · source§

impl StructuralEq for ParseFloatError

1.0.0 · source§

impl StructuralEq for ParseIntError

1.34.0 · source§

impl StructuralEq for TryFromIntError

1.0.0 · source§

impl StructuralEq for RangeFull

source§

impl StructuralEq for origin_studio::std::ptr::Alignment

1.0.0 · source§

impl StructuralEq for ParseBoolError

1.0.0 · source§

impl StructuralEq for Utf8Error

1.0.0 · source§

impl StructuralEq for FromUtf8Error

1.0.0 · source§

impl StructuralEq for String

1.3.0 · source§

impl StructuralEq for Duration

1.66.0 · source§

impl StructuralEq for TryFromFloatSecsError

1.69.0 · source§

impl StructuralEq for FromBytesUntilNulError

1.64.0 · source§

impl StructuralEq for FromBytesWithNulError

source§

impl StructuralEq for CreateFlags

source§

impl StructuralEq for WatchFlags

source§

impl StructuralEq for Access

source§

impl StructuralEq for AtFlags

source§

impl StructuralEq for FallocateFlags

source§

impl StructuralEq for MemfdFlags

source§

impl StructuralEq for Mode

source§

impl StructuralEq for OFlags

source§

impl StructuralEq for RenameFlags

source§

impl StructuralEq for ResolveFlags

source§

impl StructuralEq for SealFlags

source§

impl StructuralEq for StatVfsMountFlags

source§

impl StructuralEq for StatxFlags

source§

impl StructuralEq for Errno

source§

impl StructuralEq for DupFlags

source§

impl StructuralEq for FdFlags

source§

impl StructuralEq for ReadWriteFlags

source§

impl StructuralEq for MapFlags

source§

impl StructuralEq for MlockFlags

source§

impl StructuralEq for MprotectFlags

source§

impl StructuralEq for MremapFlags

source§

impl StructuralEq for MsyncFlags

source§

impl StructuralEq for ProtFlags

source§

impl StructuralEq for UserfaultfdFlags

source§

impl StructuralEq for MountFlags

source§

impl StructuralEq for MountPropagationFlags

source§

impl StructuralEq for UnmountFlags

source§

impl StructuralEq for PipeFlags

source§

impl StructuralEq for SpliceFlags

source§

impl StructuralEq for FutexFlags

source§

impl StructuralEq for TimerfdFlags

source§

impl StructuralEq for TimerfdTimerFlags

source§

impl StructuralEq for XattrFlags

source§

impl StructuralEq for Opcode

source§

impl StructuralEq for Pid

source§

impl StructuralEq for Cpuid

source§

impl StructuralEq for MembarrierQuery

source§

impl StructuralEq for PidfdFlags

source§

impl StructuralEq for PidfdGetfdFlags

source§

impl StructuralEq for FloatingPointEmulationControl

source§

impl StructuralEq for FloatingPointExceptionMode

source§

impl StructuralEq for SpeculationFeatureControl

source§

impl StructuralEq for SpeculationFeatureState

source§

impl StructuralEq for UnalignedAccessControl

source§

impl StructuralEq for Rlimit

source§

impl StructuralEq for CpuSet

source§

impl StructuralEq for WaitOptions

source§

impl StructuralEq for WaitidOptions

source§

impl StructuralEq for CapabilityFlags

source§

impl StructuralEq for CapabilitySets

source§

impl StructuralEq for CapabilitiesSecureBits

source§

impl StructuralEq for SVEVectorLengthConfig

source§

impl StructuralEq for TaggedAddressMode

source§

impl StructuralEq for ThreadNameSpaceType

source§

impl StructuralEq for UnshareFlags

source§

impl StructuralEq for Gid

source§

impl StructuralEq for Uid

1.33.0 · source§

impl StructuralEq for PhantomPinned

§

impl StructuralEq for ArangeEntry

§

impl StructuralEq for Augmentation

§

impl StructuralEq for BaseAddresses

§

impl StructuralEq for BigEndian

§

impl StructuralEq for DebugTypeSignature

§

impl StructuralEq for DwAccess

§

impl StructuralEq for DwAddr

§

impl StructuralEq for DwAt

§

impl StructuralEq for DwAte

§

impl StructuralEq for DwCc

§

impl StructuralEq for DwCfa

§

impl StructuralEq for DwChildren

§

impl StructuralEq for DwDefaulted

§

impl StructuralEq for DwDs

§

impl StructuralEq for DwDsc

§

impl StructuralEq for DwEhPe

§

impl StructuralEq for DwEnd

§

impl StructuralEq for DwForm

§

impl StructuralEq for DwId

§

impl StructuralEq for DwIdx

§

impl StructuralEq for DwInl

§

impl StructuralEq for DwLang

§

impl StructuralEq for DwLle

§

impl StructuralEq for DwLnct

§

impl StructuralEq for DwLne

§

impl StructuralEq for DwLns

§

impl StructuralEq for DwMacro

§

impl StructuralEq for DwOp

§

impl StructuralEq for DwOrd

§

impl StructuralEq for DwRle

§

impl StructuralEq for DwSect

§

impl StructuralEq for DwSectV2

§

impl StructuralEq for DwTag

§

impl StructuralEq for DwUt

§

impl StructuralEq for DwVirtuality

§

impl StructuralEq for DwVis

§

impl StructuralEq for DwarfFileType

§

impl StructuralEq for DwoId

§

impl StructuralEq for Encoding

§

impl StructuralEq for Error

§

impl StructuralEq for Format

§

impl StructuralEq for LineEncoding

§

impl StructuralEq for LittleEndian

§

impl StructuralEq for Pointer

§

impl StructuralEq for Range

§

impl StructuralEq for ReaderOffsetId

§

impl StructuralEq for Register

§

impl StructuralEq for RunTimeEndian

§

impl StructuralEq for SectionBaseAddresses

§

impl StructuralEq for SectionId

§

impl StructuralEq for StoreOnHeap

§

impl StructuralEq for UnitIndexSection

§

impl StructuralEq for UnwindAction

§

impl StructuralEq for UnwindReasonCode

§

impl StructuralEq for ValueType

§

impl StructuralEq for fsconfig_command

§

impl StructuralEq for membarrier_cmd

§

impl StructuralEq for membarrier_cmd_flag

1.10.0 · source§

impl<'a> StructuralEq for Location<'a>

source§

impl<'a> StructuralEq for Utf8Chunk<'a>

§

impl<'bases, Section, R> StructuralEq for CieOrFde<'bases, Section, R>where R: Reader, Section: UnwindSection<R>,

§

impl<'bases, Section, R> StructuralEq for PartialFrameDescriptionEntry<'bases, Section, R>where R: Reader, Section: UnwindSection<R>,

§

impl<'input, Endian> StructuralEq for EndianSlice<'input, Endian>where Endian: Endianity,

1.55.0 · source§

impl<B, C> StructuralEq for ControlFlow<B, C>

1.0.0 · source§

impl<Idx> StructuralEq for origin_studio::std::ops::Range<Idx>

1.0.0 · source§

impl<Idx> StructuralEq for RangeFrom<Idx>

1.26.0 · source§

impl<Idx> StructuralEq for RangeInclusive<Idx>

1.0.0 · source§

impl<Idx> StructuralEq for RangeTo<Idx>

1.26.0 · source§

impl<Idx> StructuralEq for RangeToInclusive<Idx>

§

impl<R> StructuralEq for CallFrameInstruction<R>where R: Reader,

§

impl<R> StructuralEq for CfaRule<R>where R: Reader,

§

impl<R> StructuralEq for DebugFrame<R>where R: Reader,

§

impl<R> StructuralEq for EhFrame<R>where R: Reader,

§

impl<R> StructuralEq for EhFrameHdr<R>where R: Reader,

§

impl<R> StructuralEq for Expression<R>where R: Reader,

§

impl<R> StructuralEq for LocationListEntry<R>where R: Reader,

§

impl<R> StructuralEq for RegisterRule<R>where R: Reader,

§

impl<R, A> StructuralEq for UnwindContext<R, A>where R: Reader, A: UnwindContextStorage<R>,

§

impl<R, Offset> StructuralEq for ArangeHeader<R, Offset>where R: Reader<Offset = Offset>, Offset: ReaderOffset,

§

impl<R, Offset> StructuralEq for CommonInformationEntry<R, Offset>where R: Reader<Offset = Offset>, Offset: ReaderOffset,

§

impl<R, Offset> StructuralEq for FrameDescriptionEntry<R, Offset>where R: Reader<Offset = Offset>, Offset: ReaderOffset,

§

impl<R, Offset> StructuralEq for Operation<R, Offset>where R: Reader<Offset = Offset>, Offset: ReaderOffset,

§

impl<R, S> StructuralEq for UnwindTableRow<R, S>where R: Reader, S: UnwindContextStorage<R>,

§

impl<Storage> StructuralEq for __BindgenBitfieldUnit<Storage>

1.17.0 · source§

impl<T> StructuralEq for Bound<T>

1.0.0 · source§

impl<T> StructuralEq for Option<T>

1.36.0 · source§

impl<T> StructuralEq for Poll<T>

source§

impl<T> StructuralEq for &Twhere T: ?Sized,

source§

impl<T> StructuralEq for [T]

source§

impl<T> StructuralEq for (T₁, T₂, …, Tₙ)

This trait is implemented for tuples up to twelve items long.

1.19.0 · source§

impl<T> StructuralEq for Reverse<T>

1.20.0 · source§

impl<T> StructuralEq for ManuallyDrop<T>where T: ?Sized,

source§

impl<T> StructuralEq for Saturating<T>

1.0.0 · source§

impl<T> StructuralEq for Wrapping<T>

source§

impl<T> StructuralEq for PhantomData<T>where T: ?Sized,

§

impl<T> StructuralEq for DebugAbbrevOffset<T>

§

impl<T> StructuralEq for DebugAddrBase<T>

§

impl<T> StructuralEq for DebugAddrIndex<T>

§

impl<T> StructuralEq for DebugArangesOffset<T>

§

impl<T> StructuralEq for DebugFrameOffset<T>

§

impl<T> StructuralEq for DebugInfoOffset<T>

§

impl<T> StructuralEq for DebugLineOffset<T>

§

impl<T> StructuralEq for DebugLineStrOffset<T>

§

impl<T> StructuralEq for DebugLocListsBase<T>

§

impl<T> StructuralEq for DebugLocListsIndex<T>

§

impl<T> StructuralEq for DebugMacinfoOffset<T>

§

impl<T> StructuralEq for DebugMacroOffset<T>

§

impl<T> StructuralEq for DebugRngListsBase<T>

§

impl<T> StructuralEq for DebugRngListsIndex<T>

§

impl<T> StructuralEq for DebugStrOffset<T>

§

impl<T> StructuralEq for DebugStrOffsetsBase<T>

§

impl<T> StructuralEq for DebugStrOffsetsIndex<T>

§

impl<T> StructuralEq for DebugTypesOffset<T>

§

impl<T> StructuralEq for DieReference<T>

§

impl<T> StructuralEq for EhFrameOffset<T>

§

impl<T> StructuralEq for LocationListsOffset<T>

§

impl<T> StructuralEq for RangeListsOffset<T>

§

impl<T> StructuralEq for RawRangeListsOffset<T>

§

impl<T> StructuralEq for UnitOffset<T>

§

impl<T> StructuralEq for UnitSectionOffset<T>

1.0.0 · source§

impl<T, E> StructuralEq for Result<T, E>

source§

impl<T, const N: usize> StructuralEq for [T; N]

source§

impl<Y, R> StructuralEq for GeneratorState<Y, R>