use core::{
cmp::{Ordering, Eq, Ord, PartialEq, PartialOrd},
hash::{Hash, Hasher},
fmt::{self, Debug},
};
pub use self::type_ne_::TypeNe;
mod type_ne_ {
use core::marker::PhantomData;
pub struct TypeNe<L: ?Sized, R: ?Sized>(PhantomData<TypeNeHelper<L, R>>);
struct TypeNeHelper<L: ?Sized, R: ?Sized>(
fn(PhantomData<L>) -> PhantomData<L>,
fn(PhantomData<R>) -> PhantomData<R>,
);
impl<L: ?Sized, R: ?Sized> TypeNe<L, R> {
#[inline(always)]
pub const unsafe fn new_unchecked() -> TypeNe<L, R> {
TypeNe(PhantomData)
}
}
}
impl<L: ?Sized, R: ?Sized> Copy for TypeNe<L, R> {}
impl<L: ?Sized, R: ?Sized> Clone for TypeNe<L, R> {
fn clone(&self) -> Self {
*self
}
}
impl<L: ?Sized, R: ?Sized> Debug for TypeNe<L, R> {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
f.write_str("TypeNe")
}
}
impl<L: ?Sized, R: ?Sized> PartialEq for TypeNe<L, R> {
fn eq(&self, _: &Self) -> bool {
true
}
}
impl<L: ?Sized, R: ?Sized> PartialOrd for TypeNe<L, R> {
fn partial_cmp(&self, _: &Self) -> Option<Ordering> {
Some(Ordering::Equal)
}
}
impl<L: ?Sized, R: ?Sized> Ord for TypeNe<L, R> {
fn cmp(&self, _: &Self) -> Ordering {
Ordering::Equal
}
}
impl<L: ?Sized, R: ?Sized> Eq for TypeNe<L, R> {}
impl<L: ?Sized, R: ?Sized> Hash for TypeNe<L, R> {
fn hash<H>(&self, _state: &mut H)
where H: Hasher
{}
}