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] #[allow(clippy::cast_possible_truncation)] fn text_len(self) -> TextSize { (self.len_utf8() as u32).into() } }