Игровая площадка
лкнулся с проблемой, пытаясь создать общий вектор для структуры. Это была моя первая попытка:
#[derive(Serialize)]
struct Card {
sections: Vec<Section<WidgetTrait>>
}
#[derive(Serialize)]
struct Section<T: WidgetTrait> {
header: String,
widgets: Vec<T>
}
Это привело меня к ошибке, чтоSized
не реализуется иWidgetTrait
Размер не известен во время компиляции.
Моя следующая попытка была использоватьBox<WidgetTrait>
вот так:
#[derive(Serialize)]
struct Section {
header: String,
widgets: Vec<Box<WidgetTrait>>
}
Это привело меня к ошибке:
error[E0277]: the trait bound `WidgetTrait: serde::Serialize` is not satisfied
--> src/main.rs:11:10
|
11 | #[derive(Serialize)]
| ^^^^^^^^^ the trait `serde::Serialize` is not implemented for `WidgetTrait`
|
= note: required because of the requirements on the impl of `serde::Serialize` for `std::boxed::Box<WidgetTrait>`
= note: required because of the requirements on the impl of `serde::Serialize` for `std::vec::Vec<std::boxed::Box<WidgetTrait>>`
= note: required by `serde::ser::SerializeStruct::serialize_field`
Моя цель для вектора виджетов вSection
структура, чтобы иметь возможность принимать различные типы виджетов, которые реализуютWidgetTrait
черта, как вы бы с интерфейсом.