Trait origin_studio::std::marker::StructuralEq
source · 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.
Implementors§
impl StructuralEq for AsciiChar
impl StructuralEq for origin_studio::std::cmp::Ordering
impl StructuralEq for TryReserveErrorKind
impl StructuralEq for VarError
impl StructuralEq for origin_studio::std::fmt::Alignment
impl StructuralEq for IpAddr
impl StructuralEq for Ipv6MulticastScope
impl StructuralEq for SocketAddr
impl StructuralEq for FpCategory
impl StructuralEq for IntErrorKind
impl StructuralEq for Which
impl StructuralEq for SearchStep
impl StructuralEq for origin_studio::std::sync::atomic::Ordering
impl StructuralEq for rustix::backend::fs::types::Advice
impl StructuralEq for FileType
impl StructuralEq for FlockOperation
impl StructuralEq for rustix::backend::mm::types::Advice
impl StructuralEq for MembarrierCommand
impl StructuralEq for Resource
impl StructuralEq for FutexOperation
impl StructuralEq for TimerfdClockId
impl StructuralEq for ClockId
impl StructuralEq for SeekFrom
impl StructuralEq for Direction
impl StructuralEq for DumpableBehavior
impl StructuralEq for EndianMode
impl StructuralEq for FloatingPointMode
impl StructuralEq for MachineCheckMemoryCorruptionKillPolicy
impl StructuralEq for PTracer
impl StructuralEq for SpeculationFeature
impl StructuralEq for TimeStampCounterReadability
impl StructuralEq for TimingMethod
impl StructuralEq for VirtualMemoryMapAddress
impl StructuralEq for Signal
impl StructuralEq for Capability
impl StructuralEq for CoreSchedulingScope
impl StructuralEq for SecureComputingMode
impl StructuralEq for SysCallUserDispatchFastSwitch
impl StructuralEq for LinkNameSpaceType
impl StructuralEq for bool
impl StructuralEq for char
impl StructuralEq for i8
impl StructuralEq for i16
impl StructuralEq for i32
impl StructuralEq for i64
impl StructuralEq for i128
impl StructuralEq for isize
impl StructuralEq for str
impl StructuralEq for u8
impl StructuralEq for u16
impl StructuralEq for u32
impl StructuralEq for u64
impl StructuralEq for u128
impl StructuralEq for ()
impl StructuralEq for usize
impl StructuralEq for AllocError
impl StructuralEq for Layout
impl StructuralEq for LayoutError
impl StructuralEq for TypeId
impl StructuralEq for CpuidResult
impl StructuralEq for CharTryFromError
impl StructuralEq for DecodeUtf16Error
impl StructuralEq for ParseCharError
impl StructuralEq for TryFromCharError
impl StructuralEq for TryReserveError
impl StructuralEq for CString
impl StructuralEq for FromVecWithNulError
impl StructuralEq for IntoStringError
impl StructuralEq for NulError
impl StructuralEq for origin_studio::std::fmt::Error
impl StructuralEq for Assume
impl StructuralEq for AddrParseError
impl StructuralEq for Ipv4Addr
impl StructuralEq for Ipv6Addr
impl StructuralEq for SocketAddrV4
impl StructuralEq for SocketAddrV6
impl StructuralEq for NonZeroI8
impl StructuralEq for NonZeroI16
impl StructuralEq for NonZeroI32
impl StructuralEq for NonZeroI64
impl StructuralEq for NonZeroI128
impl StructuralEq for NonZeroIsize
impl StructuralEq for NonZeroU8
impl StructuralEq for NonZeroU16
impl StructuralEq for NonZeroU32
impl StructuralEq for NonZeroU64
impl StructuralEq for NonZeroU128
impl StructuralEq for NonZeroUsize
impl StructuralEq for ParseFloatError
impl StructuralEq for ParseIntError
impl StructuralEq for TryFromIntError
impl StructuralEq for RangeFull
impl StructuralEq for origin_studio::std::ptr::Alignment
impl StructuralEq for ParseBoolError
impl StructuralEq for Utf8Error
impl StructuralEq for FromUtf8Error
impl StructuralEq for String
impl StructuralEq for Duration
impl StructuralEq for TryFromFloatSecsError
impl StructuralEq for FromBytesUntilNulError
impl StructuralEq for FromBytesWithNulError
impl StructuralEq for CreateFlags
impl StructuralEq for WatchFlags
impl StructuralEq for Access
impl StructuralEq for AtFlags
impl StructuralEq for FallocateFlags
impl StructuralEq for MemfdFlags
impl StructuralEq for Mode
impl StructuralEq for OFlags
impl StructuralEq for RenameFlags
impl StructuralEq for ResolveFlags
impl StructuralEq for SealFlags
impl StructuralEq for StatVfsMountFlags
impl StructuralEq for StatxFlags
impl StructuralEq for Errno
impl StructuralEq for DupFlags
impl StructuralEq for FdFlags
impl StructuralEq for ReadWriteFlags
impl StructuralEq for MapFlags
impl StructuralEq for MlockFlags
impl StructuralEq for MprotectFlags
impl StructuralEq for MremapFlags
impl StructuralEq for MsyncFlags
impl StructuralEq for ProtFlags
impl StructuralEq for UserfaultfdFlags
impl StructuralEq for MountFlags
impl StructuralEq for MountPropagationFlags
impl StructuralEq for UnmountFlags
impl StructuralEq for PipeFlags
impl StructuralEq for SpliceFlags
impl StructuralEq for FutexFlags
impl StructuralEq for TimerfdFlags
impl StructuralEq for TimerfdTimerFlags
impl StructuralEq for XattrFlags
impl StructuralEq for Opcode
impl StructuralEq for Pid
impl StructuralEq for Cpuid
impl StructuralEq for MembarrierQuery
impl StructuralEq for PidfdFlags
impl StructuralEq for PidfdGetfdFlags
impl StructuralEq for FloatingPointEmulationControl
impl StructuralEq for FloatingPointExceptionMode
impl StructuralEq for SpeculationFeatureControl
impl StructuralEq for SpeculationFeatureState
impl StructuralEq for UnalignedAccessControl
impl StructuralEq for Rlimit
impl StructuralEq for CpuSet
impl StructuralEq for WaitOptions
impl StructuralEq for WaitidOptions
impl StructuralEq for CapabilityFlags
impl StructuralEq for CapabilitySets
impl StructuralEq for CapabilitiesSecureBits
impl StructuralEq for SVEVectorLengthConfig
impl StructuralEq for TaggedAddressMode
impl StructuralEq for ThreadNameSpaceType
impl StructuralEq for Gid
impl StructuralEq for Uid
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
impl<'a> StructuralEq for Location<'a>
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,
impl<B, C> StructuralEq for ControlFlow<B, C>
impl<Idx> StructuralEq for origin_studio::std::ops::Range<Idx>
impl<Idx> StructuralEq for RangeFrom<Idx>
impl<Idx> StructuralEq for RangeInclusive<Idx>
impl<Idx> StructuralEq for RangeTo<Idx>
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>
impl<T> StructuralEq for Bound<T>
impl<T> StructuralEq for Option<T>
impl<T> StructuralEq for Poll<T>
impl<T> StructuralEq for &Twhere T: ?Sized,
impl<T> StructuralEq for [T]
impl<T> StructuralEq for (T₁, T₂, …, Tₙ)
This trait is implemented for tuples up to twelve items long.