Trait tstr::TStrEq

source ·
pub trait TStrEq<Rhs>: Sized {
    const EQ: bool;
    const NE: bool = _;

    // Provided methods
    fn tstr_eq(&self, _other: &Rhs) -> bool { ... }
    fn tstr_ne(&self, _other: &Rhs) -> bool { ... }
}
Available on crate feature cmp_traits only.
Expand description

For equality comparison between type-level strings.

§Examples

§Basic

use tstr::{TS, TStrEq, tstr_eq, tstr_ne, ts};

use std::cmp::Ordering;

// tstr_eq uses this trait for comparing its TStr arguments for equality
assert!(tstr_eq!(TS!("foo"), TS!("foo")));
// what tstr_eq expands into
assert!(<TS!("foo") as TStrEq<TS!("foo")>>::EQ);

// tstr_ne uses this trait for comparing its TStr arguments for inequality
assert!(tstr_ne!(TS!("foo"), TS!("bar")));
// what tstr_ne expands into
assert!(<TS!("foo") as TStrEq<TS!("bar")>>::NE);

// You can also compare TStrs using the `tstr_eq` and `tstr_ne` methods.
assert!(ts!("foo").tstr_eq(&ts!("foo")));

assert!(ts!("foo").tstr_ne(&ts!("bar")));

§Advanced

This uses types from the for_examples module, which can be seen in the docs with the “for_examples” feature.

use tstr::for_examples::Foo;
use tstr::{TStr, TStrEq, TS, ts};

use std::ops::Index;

let this = Foo::new(3, 5, "8");
assert_eq!(get_two(&this, ts!(bar), ts!(qux)), (&3, &"8"));

// Doesn't compile
// assert_eq!(get_two(&this, ts!(bar), ts!(bar)), (&3, &3));

fn get_two<T, A, B>(
    this: &T,
    field_a: TStr<A>,
    field_b: TStr<B>,
) -> (&IndexOut<T, TStr<A>>, &IndexOut<T, TStr<B>>)
where
    T: Index<TStr<A>> + Index<TStr<B>>,
    A: TStrEq<B>,
{
    tstr::Assert::<A, B>::NOT_EQUAL;
    (&this[field_a], &this[field_b])
}


type IndexOut<T, I> = <T as Index<I>>::Output;

Required Associated Constants§

source

const EQ: bool

Whether Self equals Rhs

Provided Associated Constants§

source

const NE: bool = _

Whether Self is not equal to Rhs

Provided Methods§

source

fn tstr_eq(&self, _other: &Rhs) -> bool

Returns whether self is equal to other.

source

fn tstr_ne(&self, _other: &Rhs) -> bool

Returns whether self is not equal to other.

Object Safety§

This trait is not object safe.

Implementors§

source§

impl<T, U> TStrEq<TStr<U>> for TStr<T>
where T: TStrEq<U>,

source§

const EQ: bool = T::EQ