[[ニュータイプパターン]]を使って[[構造体 (Rust)|構造体]]を保持する。 ```rust #[derive(Debug)] struct Dog { id: i32, name: String, } #[derive(Debug)] struct Cat { id: i32, name: String, } enum Animal { Dog(Dog), Cat(Cat), } mod シンプル { use super::*; use std::fmt::format; #[test] fn 構造体を外部定義にしてenumできる() { fn get_identifier(animal: Animal) -> String { match animal { Animal::Dog(dog) => format!("{}: {}", dog.id, dog.name), Animal::Cat(cat) => format!("{}: {}", cat.id, cat.name), } } let cat = Cat { id: 10, name: "mike".to_string(), }; assert_eq!(get_identifier(Animal::Cat(cat)), "mike".to_string()); } } ``` ## 参考 - [Rust の enum 設計パターンメモ](https://zenn.dev/takanori_is/scraps/660a8309817f3c)