| 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() |
| } |
| } |