Skip to main content

LowerCamel

Struct LowerCamel 

Source
pub struct LowerCamel<P>(/* private fields */);
Expand description

A case adapter for a character profile that accepts uncased and lowercase characters on the first character of a chunk or identifier.

§Note

If you’re using the regular unicode profile, it’s possible that you can construct valid strings which appear to break the requirements of this type.

use typed_ident::presets::unicode::LowerCamelIdent;
assert!(LowerCamelIdent::new("_A").is_err()); // Doesn't work (expected).
assert!(LowerCamelIdent::new("_゙A").is_ok()); // Works?

The payload provided for that second case is:

  • _ (U+005F) LOW LINE
  • (U+3099) COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK
  • A (U+0041) LATIN CAPITAL LETTER A

The way to prevent this is to disallow Mn/Mc/Me characters on chunk start.

You can get a profile which does this by enabling unicode-strict. This will enable the Strict profile which can be used directly - or if you have presets enabled - used indirectly through strict presets.

use typed_ident::presets::strict::LowerCamelIdent;
assert!(LowerCamelIdent::new("_A").is_err()); // Doesn't work (expected).
assert!(LowerCamelIdent::new("_゙A").is_err()); // Now it doesn't work!

See Strict for more details on when you should do this.

Trait Implementations§

Source§

impl<P: CharProfile> CasedProfile for LowerCamel<P>

Source§

impl<P: CharProfile> Profile for LowerCamel<P>

Source§

const APPEND_CLOSED: AppendClosed

LowerCamel cannot be append-closed for >=Fragment, because is_chunk_start is not identical to is_chunk_continue.

See Profile::APPEND_CLOSED for details.

Source§

type BaseProfile = P

The underlying profile that this profile is based on. Read more
Source§

type Segmentation = <P as Profile>::Segmentation

The segmentation strategy that this profile uses. Read more
Source§

fn is_ident_start(c: char) -> bool

Whether or not the provided character can appear at the absolute start of an identifier. Read more
Source§

fn is_chunk_start(c: char) -> bool

Whether or not the provided character can appear at the start of a new chunk (e.g. right after a delimiter). Read more
Source§

fn in_profile(c: char) -> bool

Whether or not the provided character can appear at any point in a chunk. Read more
Source§

fn is_chunk_continue(c: char) -> bool

Whether or not the provided character is valid at any position after the first character of a chunk (a run of non-delimiter characters).
Source§

impl<Superset, Subset> SubsetOf<LowerCamel<Superset>> for Lower<Subset>
where Superset: CharProfile, Subset: CharProfile + SubsetOf<Superset>,

Proof: If SuperSubset, then LowerCamel<Super>Lower<Subset> (because LowerCamelLower).

Let’s pretend that Superset=Unicode, and Subset=Ascii.

If Ascii: SubsetOf<Unicode> (true), then this implies the following:

  • Lower<Ascii>: SubsetOf<LowerCamel<Unicode>>

§Proof

left_is_subset_of_right::<Lower<Ascii>, LowerCamel<Ascii>>();
left_is_subset_of_right::<Lower<Unicode>, LowerCamel<Unicode>>();
left_is_subset_of_right::<Lower<Ascii>, LowerCamel<Unicode>>();
Source§

impl<Superset, Subset> SubsetOf<LowerCamel<Superset>> for LowerCamel<Subset>
where Superset: CharProfile, Subset: CharProfile + SubsetOf<Superset>,

Proof: If SuperSubset, then LowerCamel<Super>LowerCamel<Subset>.

Let’s pretend that Superset=Unicode, and Subset=Ascii.

If Ascii: SubsetOf<Unicode> (true), then this implies the following:

  • LowerCamel<Ascii>: SubsetOf<LowerCamel<Unicode>>

§Proof

left_is_subset_of_right::<LowerCamel<Ascii>, LowerCamel<Ascii>>();
left_is_subset_of_right::<LowerCamel<Unicode>, LowerCamel<Unicode>>();
left_is_subset_of_right::<LowerCamel<Ascii>, LowerCamel<Unicode>>();
Source§

impl<Superset, Subset> SubsetOf<Superset> for LowerCamel<Subset>
where Superset: CharProfile, Subset: CharProfile + SubsetOf<Superset>,

Proof: If SuperSubset, then SuperLowerCamel<Subset>.

Let’s pretend that Superset=Unicode, and Subset=Ascii.

If Ascii: SubsetOf<Unicode> (true), then this implies the following:

  • LowerCamel<Ascii>: SubsetOf<Unicode>

§Proof

left_is_subset_of_right::<LowerCamel<Ascii>, Ascii>();
left_is_subset_of_right::<LowerCamel<Unicode>, Unicode>();
left_is_subset_of_right::<LowerCamel<Ascii>, Unicode>();

Auto Trait Implementations§

§

impl<P> Freeze for LowerCamel<P>
where PhantomData<P>: Freeze,

§

impl<P> RefUnwindSafe for LowerCamel<P>

§

impl<P> Send for LowerCamel<P>
where PhantomData<P>: Send,

§

impl<P> Sync for LowerCamel<P>
where PhantomData<P>: Sync,

§

impl<P> Unpin for LowerCamel<P>
where PhantomData<P>: Unpin,

§

impl<P> UnsafeUnpin for LowerCamel<P>

§

impl<P> UnwindSafe for LowerCamel<P>

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<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 = !

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

fn try_from(value: U) -> Result<T, !>

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.