Struct tstr::TStr [−][src]
pub struct TStr<T>(_);
Expand description
A type-level string type, similar to a &'static str
const parameter.
Examples
Accessing Fields
This example demonstrates how you can use TStr
to implement a generic accessor trait.
use tstr::TStr; use tstr::{TS, ts}; fn main() { let mut tup = (3, 5, 8); assert_eq!(tup.get(ts!(0)), &3); assert_eq!(tup.get(ts!(1)), &5); assert_eq!(tup.get(ts!(2)), &8); let old_0 = replace(&mut tup, ts!(0), 333); let old_1 = replace(&mut tup, ts!(1), 555); let old_2 = replace(&mut tup, ts!(2), 888); assert_eq!(tup.get(ts!(0)), &333); assert_eq!(tup.get(ts!(1)), &555); assert_eq!(tup.get(ts!(2)), &888); assert_eq!(old_0, 3); assert_eq!(old_1, 5); assert_eq!(old_2, 8); } fn replace<T, N>(this: &mut T, name: TStr<N>, replacement: T::Field) -> T::Field where T: Access<TStr<N>>, T::Field: Clone, { let ret = this.get(name).clone(); this.set(name, replacement); ret } trait Access<N> { type Field; fn get(&self, _field_name: N) -> &Self::Field; fn set(&mut self, _field_name: N, val: Self::Field); } impl<A, B, C> Access<TS!(0)> for (A, B, C) { type Field = A; fn get(&self, _field_name: TS!(0)) -> &A { &self.0 } fn set(&mut self, _field_name: TS!(0), val: A){ self.0 = val; } } impl<A, B, C> Access<TS!(1)> for (A, B, C) { type Field = B; fn get(&self, _field_name: TS!(1)) -> &B { &self.1 } fn set(&mut self, _field_name: TS!(1), val: B){ self.1 = val; } } impl<A, B, C> Access<TS!(2)> for (A, B, C) { type Field = C; fn get(&self, _field_name: TS!(2)) -> &C { &self.2 } fn set(&mut self, _field_name: TS!(2), val: C){ self.2 = val; } }
Implementations
Trait Implementations
impl<T> Ord for TStr<T>
[src]
impl<T> Ord for TStr<T>
[src]impl<T> PartialOrd<TStr<T>> for TStr<T>
[src]
impl<T> PartialOrd<TStr<T>> for TStr<T>
[src]fn partial_cmp(&self, _other: &Self) -> Option<Ordering>
[src]
fn partial_cmp(&self, _other: &Self) -> Option<Ordering>
[src]This method returns an ordering between self
and other
values if one exists. Read more
#[must_use]fn lt(&self, other: &Rhs) -> bool
1.0.0[src]
#[must_use]fn lt(&self, other: &Rhs) -> bool
1.0.0[src]This method tests less than (for self
and other
) and is used by the <
operator. Read more
#[must_use]fn le(&self, other: &Rhs) -> bool
1.0.0[src]
#[must_use]fn le(&self, other: &Rhs) -> bool
1.0.0[src]This method tests less than or equal to (for self
and other
) and is used by the <=
operator. Read more
impl<const S: &'static str> StrValue for TStr<___<S>>
[src]
impl<const S: &'static str> StrValue for TStr<___<S>>
[src]This is supported on crate feature
const_generics
only.