継承よりコンポジション

// 著作権 2025 Google LLC
// SPDX-License-Identifier: Apache-2.0

pub struct Uuid([u8; 16]);

pub struct Address {
    street: String,
    city_or_province: String,
    code: String,
    country: String,
}

pub struct User {
    id: Uuid,
    address: Address,
}
  • ミックスインや継承ではなく、異なる型のフィールドを作成することで型を組み合わせます。

    これには欠点もあり、主にフィールドアクセスの使い勝手に関するものですが、その一方で、型が何を行い、何にアクセスできるのかについて、開発者に大きな制御性と明確さをもたらします。

  • trait を derive する際は、struct のすべてのフィールド型、または enum のすべてのバリアント型がその trait を実装していることを確認してください。derive マクロは、新しい型を構成するすべての型がその trait をすでに実装していることを前提としていることがよくあります。