Chars

Struct Chars 

Source
pub struct Chars<const CHAR: char, Tail>(pub PhantomData<Tail>);
Expand description

The Chars type, a.k.a. ζ, is used to represent type-level list of Charss, which are equivalent to type-level strings.

Chars is a specialized version of Cons, with the Head type being fixed to a const-generic value of type Chars. Similar to Cons, Chars is also parameterized by a Tail type, which is expected to be either the next Chars, or Nil to represent the end of the string.

Instead of reusing Cons, we combine the use of Cons within Chars so that its representation is more compact when shown in compiler error messages. Similar to Cons, Chars is also shown as ζ to further improve its readability.

We represent type-level strings as list of Charss, because it is currently not possible to use types like String or &str as const-generic parameters. On the other hand, a single Chars can be used as a const-generic parameter, and so we can workaround the limitation by combining a type-level list of Charss to represent a type-level string.

Chars is most often not used directly, but rather through the Symbol! macro, which accepts a string literal and converts it into a list of Charss.

§Example

Given the following symbol definition:

type Hello = Symbol!("hello");

The following type would be generated:

type Hello = Chars<'h', Chars<'e', Chars<'l', Chars<'l', Chars<'o', Nil>>>>>;

which would be shown with the shortened representation as:

type Hello = ζ<'h', ζ<'e', ζ<'l', ζ<'l', ζ<'o', ε>>>>>;

Tuple Fields§

§0: PhantomData<Tail>

Trait Implementations§

Source§

impl<const CHAR: char, Tail> Clone for ζ<CHAR, Tail>
where Tail: Clone,

Source§

fn clone(&self) -> ζ<CHAR, Tail>

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<const CHAR: char, Tail> Default for ζ<CHAR, Tail>
where Tail: Default,

Source§

fn default() -> ζ<CHAR, Tail>

Returns the “default value” for a type. Read more
Source§

impl<const CHAR: char, Tail> Display for ζ<CHAR, Tail>
where ζ<CHAR, Tail>: StaticFormat,

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
Source§

impl<const CHAR: char, Tail> PartialEq for ζ<CHAR, Tail>
where Tail: PartialEq,

Source§

fn eq(&self, other: &ζ<CHAR, Tail>) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl<const CHAR: char, Tail> StaticFormat for ζ<CHAR, Tail>
where Tail: StaticFormat,

Source§

fn fmt(f: &mut Formatter<'_>) -> Result<(), Error>

Source§

impl<const CHAR: char, Tail> Copy for ζ<CHAR, Tail>
where Tail: Copy,

Source§

impl<const CHAR: char, Tail> Eq for ζ<CHAR, Tail>
where Tail: Eq,

Source§

impl<const CHAR: char, Tail> StructuralPartialEq for ζ<CHAR, Tail>

Auto Trait Implementations§

§

impl<const CHAR: char, Tail> Freeze for ζ<CHAR, Tail>

§

impl<const CHAR: char, Tail> RefUnwindSafe for ζ<CHAR, Tail>
where Tail: RefUnwindSafe,

§

impl<const CHAR: char, Tail> Send for ζ<CHAR, Tail>
where Tail: Send,

§

impl<const CHAR: char, Tail> Sync for ζ<CHAR, Tail>
where Tail: Sync,

§

impl<const CHAR: char, Tail> Unpin for ζ<CHAR, Tail>
where Tail: Unpin,

§

impl<const CHAR: char, Tail> UnwindSafe for ζ<CHAR, Tail>
where Tail: UnwindSafe,

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<Builder, Source, Output> CanBuildFrom<Source> for Builder
where Source: HasFields + IntoBuilder, <Source as HasFields>::Fields: FieldsBuilder<<Source as IntoBuilder>::Builder, Builder, Output = Output>,

Source§

type Output = Output

Source§

fn build_from(self, source: Source) -> Output

Source§

impl<Source, Target, Remainder> CanDowncastFields<Target> for Source
where Target: HasFields, <Target as HasFields>::Fields: FieldsExtractor<Source, Target, Remainder = Remainder>,

Source§

type Remainder = Remainder

Source§

fn downcast_fields( self, _tag: PhantomData<Target>, ) -> Result<Target, <Source as CanDowncastFields<Target>>::Remainder>

Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.