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 と同じセキュリティ上の考慮事項があります。機密データが UI やログで どのように露出しうるかを検討してください。

  • Display を実装する型には、自動的に ToString も実装されます。

  • 例のエラー型について、DebugDisplay の振る舞いを比較してください。Debug の impl はコード上で現れるデータをより直接的に表す一方、Display は 非プログラマーにより親しみやすいメッセージを提供することを示してください。