Rustでdyn Traitにderive(Debug)をつける方法

dyn Trait に derive(Debug) する方法がわからなかったので調べました。普通にTraitを実装したStructとかに derive(Debug) しても実際に println!("{:?}", struct)とか書くとエラーになってしまうようです。

以下のリンク先が参考になりました。

https://stackoverflow.com/questions/64298436/how-to-get-an-implementation-of-fmtdebug-for-a-vec-of-dyn-trait-objects

以下のようにしたらコンパイルが通ってデバッグ出力できるようになりました。

trait State: std::fmt::Debug {
  // 省略
}

// ↓↓↓dyn State で入る可能性のあるstructたち

#[derive(Debug)]
struct Draft {
  // 省略
}

#[derive(Debug)]
struct PendingReview {
  // 省略
}

#[derive(Debug)]
struct Published {
  // 省略
}

どんなに勉強しても Rust がわかる気がしませんが、がんばります。