Структура Utf8Error

#![allow(unused)]
fn main() {
pub struct Utf8Error { /* приватные поля */ }
}

Ошибки, которые могут возникнуть при попытке интерпретировать последовательность u8 как строку.

Таким образом, семейство функций и методов from_utf8 как для String, так и для &str используют эту ошибку.

Примеры

Методы этого типа ошибок могут быть использованы для создания функциональности, аналогичной String::from_utf8_lossy, без выделения памяти в куче:

#![allow(unused)]
fn main() {
fn from_utf8_lossy<F>(mut input: &[u8], mut push: F) where F: FnMut(&str) {
    loop {
        match std::str::from_utf8(input) {
            Ok(valid) => {
                push(valid);
                break
            }
            Err(error) => {
                let (valid, after_valid) = input.split_at(error.valid_up_to());
                unsafe {
                    push(std::str::from_utf8_unchecked(valid))
                }
                push("\u{FFFD}");

                if let Some(invalid_sequence_length) = error.error_len() {
                    input = &after_valid[invalid_sequence_length..]
                } else {
                    break
                }
            }
        }
    }
}
}

Реализации трейтов

impl Utf8Error

ФункцияСинтаксисПримерНазначение
valid_up_to (с версии 1.5.0, константная с 1.63.0)pub const fn valid_up_to(&self) -> usizelet valid_len = error.valid_up_to();Возвращает индекс в данной строке, до которого была проверена валидность UTF-8. Это максимальный индекс такой, что from_utf8(&input[..index]) вернет Ok(_)
error_len (с версии 1.20.0, константная с 1.63.0)pub const fn error_len(&self) -> Option<usize>let error_len = error.error_len();Предоставляет дополнительную информацию о сбое: None - неожиданно достигнут конец входных данных. valid_up_to() находится в 1-3 байтах от конца входных данных. Если поток байтов (например, файл или сетевой сокет) декодируется по частям, это может быть валидный символ, чья UTF-8 последовательность байтов распределена по нескольким чанкам. Some(len) - встретился неожиданный байт. Предоставленная длина - это длина невалидной последовательности байтов, которая начинается с индекса, заданного valid_up_to(). Декодирование должно продолжиться после этой последовательности (после вставки U+FFFD REPLACEMENT CHARACTER) в случае потери при декодировании

impl Clone for Utf8Error

ФункцияСинтаксисПримерНазначение
clonefn clone(&self) -> Utf8Errorlet cloned_error = error.clone();Возвращает копию значения
clone_fromfn clone_from(&mut self, source: &Self)error.clone_from(&other_error);Выполняет копирующее присваивание из source

impl Debug for Utf8Error

ФункцияСинтаксисПримерНазначение
fmtfn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>println!("{:?}", error);Форматирует значение с помощью заданного форматтера

impl Display for Utf8Error

ФункцияСинтаксисПримерНазначение
fmtfn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>println!("{}", error);Форматирует значение с помощью заданного форматтера

impl Error for Utf8Error

ФункцияСинтаксисПримерНазначение
source (с версии 1.30.0)fn source(&self) -> Option<&(dyn Error + 'static)>let source = error.source();Возвращает исходную причину этой ошибки, если таковая имеется
descriptionfn description(&self) -> &strlet desc = error.description();👎 Устарело с версии 1.42.0: используйте реализацию Display или to_string()
causefn cause(&self) -> Option<&dyn Error>let cause = error.cause();👎 Устарело с версии 1.33.0: заменено на Error::source, который поддерживает downcasting
providefn provide<'a>(&'a self, request: &mut Request<'a>)error.provide(&mut request);🔬 Ночная экспериментальная функция (error_generic_member_access #99301). Предоставляет доступ на основе типов к контексту, предназначенному для отчетов об ошибках

impl PartialEq for Utf8Error

ФункцияСинтаксисПримерНазначение
eqfn eq(&self, other: &Utf8Error) -> boolif error1 == error2 { ... }Проверяет равенство значений self и other, используется оператором ==
nefn ne(&self, other: &Rhs) -> boolif error1 != error2 { ... }Проверяет неравенство. Реализация по умолчанию почти всегда достаточна и не должна переопределяться без очень веской причины

impl Copy for Utf8Error

Этот трейт не имеет методов, но позволяет типу быть скопированным путем побитового копирования

impl Eq for Utf8Error

Этот трейт не имеет методов, но указывает, что тип реализует отношение эквивалентности (рефлексивность, симметричность, транзитивность)

impl StructuralPartialEq for Utf8Error

Этот трейт не имеет методов и используется для указания структурного равенства в макросах