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);

#[allow(pointer_structural_match)]
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 gstd::errors::Error

§

impl StructuralEq for ErrorReplyReason

§

impl StructuralEq for ExecutionError

§

impl StructuralEq for ExtError

§

impl StructuralEq for MemoryError

§

impl StructuralEq for MessageError

§

impl StructuralEq for ReplyCode

§

impl StructuralEq for ReservationError

§

impl StructuralEq for SignalCode

§

impl StructuralEq for SimpleExecutionError

§

impl StructuralEq for SimpleProgramCreationError

§

impl StructuralEq for SuccessReplyReason

source§

impl StructuralEq for UsageError

source§

impl StructuralEq for AsciiChar

1.0.0 · source§

impl StructuralEq for gstd::prelude::cmp::Ordering

source§

impl StructuralEq for TryReserveErrorKind

§

impl StructuralEq for gstd::prelude::collections::hashbrown::TryReserveError

1.28.0 · source§

impl StructuralEq for gstd::prelude::fmt::Alignment

1.0.0 · source§

impl StructuralEq for FpCategory

1.55.0 · source§

impl StructuralEq for IntErrorKind

source§

impl StructuralEq for SearchStep

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 core::sync::atomic::Ordering

1.65.0 · source§

impl StructuralEq for BacktraceStatus

1.0.0 · source§

impl StructuralEq for VarError

1.0.0 · source§

impl StructuralEq for SeekFrom

1.0.0 · source§

impl StructuralEq for ErrorKind

1.0.0 · source§

impl StructuralEq for Shutdown

source§

impl StructuralEq for BacktraceStyle

1.12.0 · source§

impl StructuralEq for RecvTimeoutError

1.0.0 · source§

impl StructuralEq for TryRecvError

source§

impl StructuralEq for BernoulliError

source§

impl StructuralEq for WeightedError

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 ErrorReplyPayload

§

impl StructuralEq for SyscallError

source§

impl StructuralEq for gstd::msg::MessageHandle

source§

impl StructuralEq for gstd::ActorId

source§

impl StructuralEq for gstd::CodeId

source§

impl StructuralEq for gstd::MessageId

§

impl StructuralEq for Percent

source§

impl StructuralEq for gstd::ReservationId

1.0.0 · source§

impl StructuralEq for TypeId

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 gstd::prelude::collections::TryReserveError

1.64.0 · source§

impl StructuralEq for CString

1.69.0 · source§

impl StructuralEq for FromBytesUntilNulError

1.64.0 · source§

impl StructuralEq for FromBytesWithNulError

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 gstd::prelude::fmt::Error

source§

impl StructuralEq for Assume

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 gstd::prelude::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.28.0 · source§

impl StructuralEq for Layout

1.50.0 · source§

impl StructuralEq for LayoutError

source§

impl StructuralEq for core::alloc::AllocError

1.27.0 · source§

impl StructuralEq for CpuidResult

1.0.0 · source§

impl StructuralEq for Ipv4Addr

1.0.0 · source§

impl StructuralEq for Ipv6Addr

1.0.0 · source§

impl StructuralEq for AddrParseError

1.0.0 · source§

impl StructuralEq for SocketAddrV4

1.0.0 · source§

impl StructuralEq for SocketAddrV6

1.1.0 · source§

impl StructuralEq for FileType

1.0.0 · source§

impl StructuralEq for Permissions

source§

impl StructuralEq for UCred

1.7.0 · source§

impl StructuralEq for StripPrefixError

1.0.0 · source§

impl StructuralEq for ExitStatus

source§

impl StructuralEq for ExitStatusError

1.0.0 · source§

impl StructuralEq for Output

1.5.0 · source§

impl StructuralEq for WaitTimeoutResult

1.0.0 · source§

impl StructuralEq for RecvError

1.26.0 · source§

impl StructuralEq for AccessError

1.19.0 · source§

impl StructuralEq for ThreadId

1.8.0 · source§

impl StructuralEq for Instant

1.8.0 · source§

impl StructuralEq for SystemTime

source§

impl StructuralEq for getrandom::error::Error

source§

impl StructuralEq for StepRng

source§

impl StructuralEq for SmallRng

source§

impl StructuralEq for StdRng

source§

impl StructuralEq for ChaCha8Core

source§

impl StructuralEq for ChaCha12Core

source§

impl StructuralEq for ChaCha20Core

1.33.0 · source§

impl StructuralEq for PhantomPinned

§

impl StructuralEq for Aborted

§

impl StructuralEq for ActorId

§

impl StructuralEq for AllocError

§

impl StructuralEq for BigEndian

§

impl StructuralEq for Canceled

§

impl StructuralEq for CodeId

§

impl StructuralEq for Const

§

impl StructuralEq for Dl_info

§

impl StructuralEq for Elf32_Chdr

§

impl StructuralEq for Elf32_Ehdr

§

impl StructuralEq for Elf32_Phdr

§

impl StructuralEq for Elf32_Shdr

§

impl StructuralEq for Elf32_Sym

§

impl StructuralEq for Elf64_Chdr

§

impl StructuralEq for Elf64_Ehdr

§

impl StructuralEq for Elf64_Phdr

§

impl StructuralEq for Elf64_Shdr

§

impl StructuralEq for Elf64_Sym

§

impl StructuralEq for Error

§

impl StructuralEq for Error

§

impl StructuralEq for Error

§

impl StructuralEq for Error

§

impl StructuralEq for Error

§

impl StructuralEq for Error

§

impl StructuralEq for Error

§

impl StructuralEq for FromStrRadixErrKind

§

impl StructuralEq for LittleEndian

§

impl StructuralEq for Lsb0

§

impl StructuralEq for MessageHandle

§

impl StructuralEq for MessageId

§

impl StructuralEq for MetaForm

§

impl StructuralEq for Msb0

§

impl StructuralEq for Mut

§

impl StructuralEq for NullPtrError

§

impl StructuralEq for OptionBool

§

impl StructuralEq for PathError

§

impl StructuralEq for PollNext

§

impl StructuralEq for PortableForm

§

impl StructuralEq for PortableRegistry

§

impl StructuralEq for PortableType

§

impl StructuralEq for Registry

§

impl StructuralEq for ReservationId

§

impl StructuralEq for SendError

§

impl StructuralEq for TypeDefPrimitive

§

impl StructuralEq for U128

§

impl StructuralEq for U256

§

impl StructuralEq for U512

§

impl StructuralEq for __c_anonymous_ifru_map

§

impl StructuralEq for __c_anonymous_ptrace_syscall_info_entry

§

impl StructuralEq for __c_anonymous_ptrace_syscall_info_exit

§

impl StructuralEq for __c_anonymous_ptrace_syscall_info_seccomp

§

impl StructuralEq for __c_anonymous_sockaddr_can_j1939

§

impl StructuralEq for __c_anonymous_sockaddr_can_tp

§

impl StructuralEq for __exit_status

§

impl StructuralEq for __timeval

§

impl StructuralEq for _libc_fpstate

§

impl StructuralEq for _libc_fpxreg

§

impl StructuralEq for _libc_xmmreg

§

impl StructuralEq for addrinfo

§

impl StructuralEq for aiocb

§

impl StructuralEq for arpd_request

§

impl StructuralEq for arphdr

§

impl StructuralEq for arpreq

§

impl StructuralEq for arpreq_old

§

impl StructuralEq for can_filter

§

impl StructuralEq for clone_args

§

impl StructuralEq for cmsghdr

§

impl StructuralEq for cpu_set_t

§

impl StructuralEq for dl_phdr_info

§

impl StructuralEq for dqblk

§

impl StructuralEq for fanotify_event_metadata

§

impl StructuralEq for fanotify_response

§

impl StructuralEq for fd_set

§

impl StructuralEq for ff_condition_effect

§

impl StructuralEq for ff_constant_effect

§

impl StructuralEq for ff_effect

§

impl StructuralEq for ff_envelope

§

impl StructuralEq for ff_periodic_effect

§

impl StructuralEq for ff_ramp_effect

§

impl StructuralEq for ff_replay

§

impl StructuralEq for ff_rumble_effect

§

impl StructuralEq for ff_trigger

§

impl StructuralEq for file_clone_range

§

impl StructuralEq for flock

§

impl StructuralEq for flock64

§

impl StructuralEq for fsid_t

§

impl StructuralEq for genlmsghdr

§

impl StructuralEq for glob64_t

§

impl StructuralEq for glob_t

§

impl StructuralEq for group

§

impl StructuralEq for hostent

§

impl StructuralEq for if_nameindex

§

impl StructuralEq for ifaddrs

§

impl StructuralEq for in6_addr

§

impl StructuralEq for in6_ifreq

§

impl StructuralEq for in6_pktinfo

§

impl StructuralEq for in6_rtmsg

§

impl StructuralEq for in_addr

§

impl StructuralEq for in_pktinfo

§

impl StructuralEq for inotify_event

§

impl StructuralEq for input_absinfo

§

impl StructuralEq for input_event

§

impl StructuralEq for input_id

§

impl StructuralEq for input_keymap_entry

§

impl StructuralEq for input_mask

§

impl StructuralEq for iocb

§

impl StructuralEq for iovec

§

impl StructuralEq for ip_mreq

§

impl StructuralEq for ip_mreq_source

§

impl StructuralEq for ip_mreqn

§

impl StructuralEq for ipc_perm

§

impl StructuralEq for ipv6_mreq

§

impl StructuralEq for itimerspec

§

impl StructuralEq for itimerval

§

impl StructuralEq for j1939_filter

§

impl StructuralEq for lconv

§

impl StructuralEq for linger

§

impl StructuralEq for mallinfo

§

impl StructuralEq for mallinfo2

§

impl StructuralEq for mcontext_t

§

impl StructuralEq for mmsghdr

§

impl StructuralEq for mntent

§

impl StructuralEq for msghdr

§

impl StructuralEq for msginfo

§

impl StructuralEq for msqid_ds

§

impl StructuralEq for nl_mmap_hdr

§

impl StructuralEq for nl_mmap_req

§

impl StructuralEq for nl_pktinfo

§

impl StructuralEq for nlattr

§

impl StructuralEq for nlmsgerr

§

impl StructuralEq for nlmsghdr

§

impl StructuralEq for ntptimeval

§

impl StructuralEq for open_how

§

impl StructuralEq for option

§

impl StructuralEq for packet_mreq

§

impl StructuralEq for passwd

§

impl StructuralEq for pollfd

§

impl StructuralEq for posix_spawn_file_actions_t

§

impl StructuralEq for posix_spawnattr_t

§

impl StructuralEq for protoent

§

impl StructuralEq for pthread_attr_t

§

impl StructuralEq for pthread_barrierattr_t

§

impl StructuralEq for pthread_condattr_t

§

impl StructuralEq for pthread_mutexattr_t

§

impl StructuralEq for pthread_rwlockattr_t

§

impl StructuralEq for ptrace_peeksiginfo_args

§

impl StructuralEq for ptrace_rseq_configuration

§

impl StructuralEq for ptrace_syscall_info

§

impl StructuralEq for regex_t

§

impl StructuralEq for regmatch_t

§

impl StructuralEq for rlimit

§

impl StructuralEq for rlimit64

§

impl StructuralEq for rtentry

§

impl StructuralEq for rusage

§

impl StructuralEq for sched_param

§

impl StructuralEq for sctp_authinfo

§

impl StructuralEq for sctp_initmsg

§

impl StructuralEq for sctp_nxtinfo

§

impl StructuralEq for sctp_prinfo

§

impl StructuralEq for sctp_rcvinfo

§

impl StructuralEq for sctp_sndinfo

§

impl StructuralEq for sctp_sndrcvinfo

§

impl StructuralEq for seccomp_data

§

impl StructuralEq for seccomp_notif

§

impl StructuralEq for seccomp_notif_addfd

§

impl StructuralEq for seccomp_notif_resp

§

impl StructuralEq for seccomp_notif_sizes

§

impl StructuralEq for sem_t

§

impl StructuralEq for sembuf

§

impl StructuralEq for semid_ds

§

impl StructuralEq for seminfo

§

impl StructuralEq for servent

§

impl StructuralEq for shmid_ds

§

impl StructuralEq for sigaction

§

impl StructuralEq for siginfo_t

§

impl StructuralEq for signalfd_siginfo

§

impl StructuralEq for sigset_t

§

impl StructuralEq for sigval

§

impl StructuralEq for sock_extended_err

§

impl StructuralEq for sock_filter

§

impl StructuralEq for sock_fprog

§

impl StructuralEq for sockaddr

§

impl StructuralEq for sockaddr_in

§

impl StructuralEq for sockaddr_in6

§

impl StructuralEq for sockaddr_ll

§

impl StructuralEq for sockaddr_vm

§

impl StructuralEq for sockaddr_xdp

§

impl StructuralEq for spwd

§

impl StructuralEq for stack_t

§

impl StructuralEq for stat

§

impl StructuralEq for stat64

§

impl StructuralEq for statfs

§

impl StructuralEq for statfs64

§

impl StructuralEq for statvfs

§

impl StructuralEq for statvfs64

§

impl StructuralEq for statx

§

impl StructuralEq for statx_timestamp

§

impl StructuralEq for sysinfo

§

impl StructuralEq for termios

§

impl StructuralEq for termios2

§

impl StructuralEq for timespec

§

impl StructuralEq for timeval

§

impl StructuralEq for timex

§

impl StructuralEq for tls12_crypto_info_aes_gcm_128

§

impl StructuralEq for tls12_crypto_info_aes_gcm_256

§

impl StructuralEq for tls12_crypto_info_chacha20_poly1305

§

impl StructuralEq for tls_crypto_info

§

impl StructuralEq for tm

§

impl StructuralEq for tms

§

impl StructuralEq for ucred

§

impl StructuralEq for uinput_abs_setup

§

impl StructuralEq for uinput_ff_erase

§

impl StructuralEq for uinput_ff_upload

§

impl StructuralEq for user

§

impl StructuralEq for user_regs_struct

§

impl StructuralEq for utimbuf

§

impl StructuralEq for winsize

§

impl StructuralEq for xdp_desc

§

impl StructuralEq for xdp_mmap_offsets

§

impl StructuralEq for xdp_mmap_offsets_v1

§

impl StructuralEq for xdp_options

§

impl StructuralEq for xdp_ring_offset

§

impl StructuralEq for xdp_ring_offset_v1

§

impl StructuralEq for xdp_statistics

§

impl StructuralEq for xdp_statistics_v1

§

impl StructuralEq for xdp_umem_reg

§

impl StructuralEq for xdp_umem_reg_v1

1.0.0 · source§

impl<'a> StructuralEq for Component<'a>

1.0.0 · source§

impl<'a> StructuralEq for Prefix<'a>

1.10.0 · source§

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

source§

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

1.0.0 · source§

impl<'a> StructuralEq for PrefixComponent<'a>

§

impl<'a, T> StructuralEq for CompactRef<'a, T>

§

impl<'a, T> StructuralEq for Symbol<'a, T>
where T: 'a,

§

impl<'a, T, O> StructuralEq for IterOnes<'a, T, O>
where T: 'a + BitStore, O: BitOrder,

§

impl<'a, T, O> StructuralEq for IterZeros<'a, T, O>
where T: 'a + BitStore, O: BitOrder,

1.55.0 · source§

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

1.0.0 · source§

impl<Idx> StructuralEq for 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<Inner> StructuralEq for Frozen<Inner>
where Inner: Mutability,

§

impl<R> StructuralEq for BitEnd<R>
where R: BitRegister,

§

impl<R> StructuralEq for BitIdx<R>
where R: BitRegister,

§

impl<R> StructuralEq for BitIdxError<R>
where R: BitRegister,

§

impl<R> StructuralEq for BitMask<R>
where R: BitRegister,

§

impl<R> StructuralEq for BitPos<R>
where R: BitRegister,

§

impl<R> StructuralEq for BitSel<R>
where R: BitRegister,

1.0.0 · source§

impl<T> StructuralEq for Option<T>

1.17.0 · source§

impl<T> StructuralEq for Bound<T>

1.36.0 · source§

impl<T> StructuralEq for Poll<T>

1.0.0 · source§

impl<T> StructuralEq for std::sync::mpsc::TrySendError<T>

source§

impl<T> StructuralEq for &T
where 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,

1.74.0 · source§

impl<T> StructuralEq for Saturating<T>

1.0.0 · source§

impl<T> StructuralEq for Wrapping<T>

1.0.0 · source§

impl<T> StructuralEq for Cursor<T>

1.0.0 · source§

impl<T> StructuralEq for std::sync::mpsc::SendError<T>

source§

impl<T> StructuralEq for CapacityError<T>

source§

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

§

impl<T> StructuralEq for AllowStdIo<T>

§

impl<T> StructuralEq for BitPtrError<T>
where T: BitStore,

§

impl<T> StructuralEq for BitSpanError<T>
where T: BitStore,

§

impl<T> StructuralEq for Compact<T>

§

impl<T> StructuralEq for Field<T>
where T: Form,

§

impl<T> StructuralEq for Interner<T>

§

impl<T> StructuralEq for MisalignError<T>

§

impl<T> StructuralEq for Path<T>
where T: Form,

§

impl<T> StructuralEq for TrySendError<T>

§

impl<T> StructuralEq for Type<T>
where T: Form,

§

impl<T> StructuralEq for TypeDef<T>
where T: Form,

§

impl<T> StructuralEq for TypeDefArray<T>
where T: Form,

§

impl<T> StructuralEq for TypeDefBitSequence<T>
where T: Form,

§

impl<T> StructuralEq for TypeDefCompact<T>
where T: Form,

§

impl<T> StructuralEq for TypeDefComposite<T>
where T: Form,

§

impl<T> StructuralEq for TypeDefSequence<T>
where T: Form,

§

impl<T> StructuralEq for TypeDefTuple<T>
where T: Form,

§

impl<T> StructuralEq for TypeDefVariant<T>
where T: Form,

§

impl<T> StructuralEq for TypeParameter<T>
where T: Form,

§

impl<T> StructuralEq for UntrackedSymbol<T>

§

impl<T> StructuralEq for Variant<T>
where T: Form,

1.0.0 · source§

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

§

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

§

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

source§

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

source§

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