| use {crate::TextSize, std::convert::TryInto}; | |
| use priv_in_pub::Sealed; | |
| mod priv_in_pub { | |
| pub trait Sealed {} | |
| } | |
| /// Primitives with a textual length that can be passed to [`TextSize::of`]. | |
| pub trait TextLen: Copy + Sealed { | |
| /// The textual length of this primitive. | |
| fn text_len(self) -> TextSize; | |
| } | |
| impl Sealed for &'_ str {} | |
| impl TextLen for &'_ str { | |
| #[inline] | |
| fn text_len(self) -> TextSize { | |
| self.len().try_into().unwrap() | |
| } | |
| } | |
| impl Sealed for &'_ String {} | |
| impl TextLen for &'_ String { | |
| #[inline] | |
| fn text_len(self) -> TextSize { | |
| self.as_str().text_len() | |
| } | |
| } | |
| impl Sealed for char {} | |
| impl TextLen for char { | |
| #[inline] | |
| fn text_len(self) -> TextSize { | |
| (self.len_utf8() as u32).into() | |
| } | |
| } |