Trait gstd::prelude::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);
#[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§
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
impl StructuralEq for UsageError
impl StructuralEq for AsciiChar
impl StructuralEq for gstd::prelude::cmp::Ordering
impl StructuralEq for TryReserveErrorKind
impl StructuralEq for gstd::prelude::collections::hashbrown::TryReserveError
impl StructuralEq for gstd::prelude::fmt::Alignment
impl StructuralEq for FpCategory
impl StructuralEq for IntErrorKind
impl StructuralEq for SearchStep
impl StructuralEq for IpAddr
impl StructuralEq for Ipv6MulticastScope
impl StructuralEq for SocketAddr
impl StructuralEq for core::sync::atomic::Ordering
impl StructuralEq for BacktraceStatus
impl StructuralEq for VarError
impl StructuralEq for SeekFrom
impl StructuralEq for ErrorKind
impl StructuralEq for Shutdown
impl StructuralEq for BacktraceStyle
impl StructuralEq for RecvTimeoutError
impl StructuralEq for TryRecvError
impl StructuralEq for BernoulliError
impl StructuralEq for WeightedError
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 ErrorReplyPayload
impl StructuralEq for SyscallError
impl StructuralEq for gstd::msg::MessageHandle
impl StructuralEq for gstd::ActorId
impl StructuralEq for gstd::CodeId
impl StructuralEq for gstd::MessageId
impl StructuralEq for Percent
impl StructuralEq for gstd::ReservationId
impl StructuralEq for TypeId
impl StructuralEq for CharTryFromError
impl StructuralEq for DecodeUtf16Error
impl StructuralEq for ParseCharError
impl StructuralEq for TryFromCharError
impl StructuralEq for gstd::prelude::collections::TryReserveError
impl StructuralEq for CString
impl StructuralEq for FromBytesUntilNulError
impl StructuralEq for FromBytesWithNulError
impl StructuralEq for FromVecWithNulError
impl StructuralEq for IntoStringError
impl StructuralEq for NulError
impl StructuralEq for gstd::prelude::fmt::Error
impl StructuralEq for Assume
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 gstd::prelude::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 Layout
impl StructuralEq for LayoutError
impl StructuralEq for core::alloc::AllocError
impl StructuralEq for CpuidResult
impl StructuralEq for Ipv4Addr
impl StructuralEq for Ipv6Addr
impl StructuralEq for AddrParseError
impl StructuralEq for SocketAddrV4
impl StructuralEq for SocketAddrV6
impl StructuralEq for FileType
impl StructuralEq for Permissions
impl StructuralEq for UCred
impl StructuralEq for StripPrefixError
impl StructuralEq for ExitStatus
impl StructuralEq for ExitStatusError
impl StructuralEq for Output
impl StructuralEq for WaitTimeoutResult
impl StructuralEq for RecvError
impl StructuralEq for AccessError
impl StructuralEq for ThreadId
impl StructuralEq for Instant
impl StructuralEq for SystemTime
impl StructuralEq for getrandom::error::Error
impl StructuralEq for StepRng
impl StructuralEq for SmallRng
impl StructuralEq for StdRng
impl StructuralEq for ChaCha8Core
impl StructuralEq for ChaCha12Core
impl StructuralEq for ChaCha20Core
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
impl<'a> StructuralEq for Component<'a>
impl<'a> StructuralEq for Prefix<'a>
impl<'a> StructuralEq for Location<'a>
impl<'a> StructuralEq for Utf8Chunk<'a>
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,
impl<B, C> StructuralEq for ControlFlow<B, C>
impl<Idx> StructuralEq for 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<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,
impl<T> StructuralEq for Option<T>
impl<T> StructuralEq for Bound<T>
impl<T> StructuralEq for Poll<T>
impl<T> StructuralEq for std::sync::mpsc::TrySendError<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.