Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Display

Трейт «запись в строку», в первую очередь обеспечивающий удобочитаемость для конечного пользователя.

Можно получить через derive: ❌, без крейтов вроде derive_more.

// Copyright 2025 Google LLC
// SPDX-License-Identifier: Apache-2.0

#[derive(Debug)]
pub enum NetworkError {
    HttpCode(u16),
    WhaleBitTheUnderseaCable,
}

impl std::fmt::Display for NetworkError {
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
        match self {
            NetworkError::HttpCode(code) => write!(f, "HTTP Error code {code}"),
            NetworkError::WhaleBitTheUnderseaCable => {
                write!(f, "Whale attack detected – call Ishmael")
            }
        }
    }
}

fn main() {
    let http = NetworkError::HttpCode(404);
    let whale = NetworkError::WhaleBitTheUnderseaCable;

    println!("http debug: {:?}", http);
    println!("http display: {}", http);
    println!("whale debug: {:?}", whale);
    println!("whale display: {}", whale);
}
  • Трейт, похожий на Debug, но с акцентом на удобочитаемость для конечного пользователя.

  • Предусловие для трейта Error. Если реализуете его для типа ошибки, сосредоточьтесь на том, чтобы дать понятное описание ошибки для пользователей и программистов, кроме вас.

  • Те же соображения безопасности, что и для Debug: учитывайте способы, которыми чувствительные данные могут попасть в интерфейс или логи.

  • Типы, которые реализуют Display, автоматически получают реализацию ToString.

  • Сравните поведение Debug и Display для нашего примера типа ошибки. Покажите, что реализация Debug более прямо отображает данные так, как они выглядят в коде, тогда как Display даёт более дружелюбное сообщение для непрограммистов.