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

Debug

Трейт «запись в строку» для отладочных целей.

Можно получить через derive: ✅

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

#[derive(Debug)]
pub struct Date {
    day: u8,
    month: u8,
    year: i64,
}

#[derive(Debug)]
pub struct User {
    name: String,
    date_of_birth: Date,
}

pub struct PlainTextPassword {
    password: String,
    hint: String,
}

impl std::fmt::Debug for PlainTextPassword {
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
        f.debug_struct("PlainTextPassword")
            .field("hint", &self.hint)
            .field("password", &"[omitted]")
            .finish()
    }
}

fn main() {
    let user = User {
        name: "Алиса".to_string(),
        date_of_birth: Date { day: 31, month: 10, year: 2002 },
    };

    println!("{user:?}");
    println!(
        "{:?}",
        PlainTextPassword {
            password: "Password123".to_string(),
            hint: "Used it for years".to_string()
        }
    );
}
  • Предоставляет простейшую функциональность «записи в строку».

  • Форматирование отладочной информации для программистов во время разработки, а не для внешнего вида или сериализации.

  • Позволяет использовать {:?} и {:#?} в макросах форматирования строк.

  • Когда не получать через derive или не реализовывать: если структура хранит чувствительные данные, подумайте, стоит ли реализовывать для неё Debug.

    • Если Debug нужен, рассмотрите ручную реализацию Debug вместо derive. Исключите чувствительные данные из реализации.