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даёт более дружелюбное сообщение для непрограммистов.