Структура Utf8Chunk
#![allow(unused)] fn main() { pub struct Utf8Chunk<'a> { /* приватные поля */ } }
Элемент, возвращаемый итератором Utf8Chunks.
Utf8Chunk хранит последовательность байтов u8 до первого поврежденного символа при декодировании UTF-8 строки.
Примеры
#![allow(unused)] fn main() { // Неверная UTF-8 строка let bytes = b"foo\xF1\x80bar"; // Декодируем первый `Utf8Chunk` let chunk = bytes.utf8_chunks().next().unwrap(); // Первые три символа - валидные UTF-8 assert_eq!("foo", chunk.valid()); // Четвертый символ поврежден assert_eq!(b"\xF1\x80", chunk.invalid()); }
Реализации трейтов
impl<'a> Utf8Chunk<'a>
| Функция | Синтаксис | Пример | Назначение |
|---|---|---|---|
| valid | pub fn valid(&self) -> &'a str | let valid_part = chunk.valid(); | Возвращает следующую валидную UTF-8 подстроку. Эта подстрока может быть пустой в начале строки или между поврежденными UTF-8 символами |
| invalid | pub fn invalid(&self) -> &'a [u8] ⓘ | let invalid_bytes = chunk.invalid(); | Возвращает невалидную последовательность, которая вызвала ошибку. Возвращаемый срез будет иметь максимальную длину 3 и начинается после подстроки, заданной valid. Декодирование продолжится после этой последовательности. Если пусто, это последний чанк в строке. Если не пусто, встретился неожиданный байт или неожиданно достигнут конец ввода. Потерянное декодирование заменит эту последовательность на U+FFFD REPLACEMENT CHARACTER |
impl<'a> Clone for Utf8Chunk<'a>
| Функция | Синтаксис | Пример | Назначение |
|---|---|---|---|
| clone | fn clone(&self) -> Utf8Chunk<'a> | let cloned_chunk = chunk.clone(); | Возвращает копию значения |
| clone_from | fn clone_from(&mut self, source: &Self) | chunk.clone_from(&other_chunk); | Выполняет копирующее присваивание из source |
impl<'a> Debug for Utf8Chunk<'a>
| Функция | Синтаксис | Пример | Назначение |
|---|---|---|---|
| fmt | fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error> | println!("{:?}", chunk); | Форматирует значение с помощью заданного форматтера |
impl<'a> PartialEq for Utf8Chunk<'a>
| Функция | Синтаксис | Пример | Назначение |
|---|---|---|---|
| eq | fn eq(&self, other: &Utf8Chunk<'a>) -> bool | if chunk1 == chunk2 { ... } | Проверяет равенство значений self и other, используется оператором == |
| ne | fn ne(&self, other: &Rhs) -> bool | if chunk1 != chunk2 { ... } | Проверяет неравенство. Реализация по умолчанию почти всегда достаточна и не должна переопределяться без очень веской причины |
impl<'a> Eq for Utf8Chunk<'a>
Этот трейт не имеет методов, но указывает, что тип реализует отношение эквивалентности (рефлексивность, симметричность, транзитивность)
impl<'a> StructuralPartialEq for Utf8Chunk<'a>
Этот трейт не имеет методов и используется для указания структурного равенства в макросах