mirror of https://github.com/astral-sh/ruff
38 lines
810 B
Rust
38 lines
810 B
Rust
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()
|
|
}
|
|
}
|