@@ -779,6 +779,39 @@ impl char {
779779 }
780780 }
781781
782+ /// Returns the case of this character:
783+ /// [`Some(CharCase::Upper)`][`CharCase::Upper`] if [`self.is_uppercase()`][`char::is_uppercase`],
784+ /// [`Some(CharCase::Lower)`][`CharCase::Lower`] if [`self.is_lowercase()`][`char::is_lowercase`],
785+ /// [`Some(CharCase::Title)`][`CharCase::Title`] if [`self.is_titlecase()`][`char::is_titlecase`], and
786+ /// `None` if [`!self.is_cased()`][`char::is_cased`].
787+ ///
788+ /// # Examples
789+ ///
790+ /// ```
791+ /// #![feature(titlecase)]
792+ /// use core::char::CharCase;
793+ /// assert_eq!('a'.case(), Some(CharCase::Lower));
794+ /// assert_eq!('δ'.case(), Some(CharCase::Lower));
795+ /// assert_eq!('A'.case(), Some(CharCase::Upper));
796+ /// assert_eq!('Δ'.case(), Some(CharCase::Upper));
797+ /// assert_eq!('Dž'.case(), Some(CharCase::Title));
798+ /// assert_eq!('中'.case(), None);
799+ /// ```
800+ #[ must_use]
801+ #[ unstable( feature = "titlecase" , issue = "none" ) ]
802+ #[ inline]
803+ pub fn case ( self ) -> Option < CharCase > {
804+ match self {
805+ 'A' ..='Z' => Some ( CharCase :: Upper ) ,
806+ 'a' ..='z' => Some ( CharCase :: Lower ) ,
807+ '\0' ..='\u{A9}' => None ,
808+ _ if !self . is_cased ( ) => None ,
809+ _ if self . is_lowercase ( ) => Some ( CharCase :: Lower ) ,
810+ _ if self . is_uppercase ( ) => Some ( CharCase :: Upper ) ,
811+ _ => Some ( CharCase :: Title ) ,
812+ }
813+ }
814+
782815 /// Returns `true` if this `char` has the `Lowercase` property.
783816 ///
784817 /// `Lowercase` is described in Chapter 4 (Character Properties) of the [Unicode Standard] and
0 commit comments