Вы правы с перечислениями, вы можете встраивать дополнительные данные в перечисление.Я думаю, вам нужно будет следовать аналогичной схеме.
Вот некоторый код, помогающий объяснить, взятый из репозитория GitHub.Сначала мы встраиваем структуру в перечисление:
struct ConsoleOutput {}
pub enum OutputTypes {
Console(ConsoleOutput),
}
Этого недостаточно, чтобы сделать его пригодным для использования;для начала нужна фабрика.Фабрика фактически выделяет структуру, которая встроена в перечисление:
pub struct OutputFactory {}
impl OutputFactory {
pub fn get() -> OutputTypes {
OutputTypes::Console(ConsoleOutput {})
}
}
Фактическая реализация немного сложнее.
После этого признак реализуется в перечислении, и признак содержит логику.Я думаю, что это та область, в которой вам нужно работать.
pub struct ShellTypes {}
pub trait OutputTrait {
fn generate(&self) -> ShellTypes;
}
impl OutputTrait for OutputTypes {
fn generate(&self) -> ShellTypes {
match *self {
_ => return ShellTypes {},
}
}
}