Composition over Inheritance
// Copyright 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,
}
-
Rather than mixins or inheritance, we compose types by creating fields of different types.
This has downsides, largely in ergonomics of field access, but gives developers a lot of control and clarity over what a type does and it has access to.
-
When deriving traits, make sure all the field types of a struct or variant types of an enum implement that trait. Derive macros often assume all types that compose a new type implement that trait already.