Несколько вопросов по serde (generic-и)

Здравствуйте!

  1. Как реализовать вектор из сериализуемых объектов неизвестных на этапе компиляции типов?
    Вот такой вариант компилятор отвергает по причине ошибки E0038. А другие варианты что-то в голову не приходят.
#[derive(Serialize, Debug)]
struct Must {
    must: Vec<Box<dyn Serialize>>
}
  1. Не компилируется своя реализация Serialize для структуры
#[derive(Debug)]
struct Term {
    name: String,
    value: TermValue
}

impl Serialize for Term {
    fn serialize<S>(&self, serializer: S) -> ::std::result::Result<S::Ok, S::Error>
            where S: Serializer {
        let mut term = serializer.serialize_struct("Term", 1)?;
        term.serialize_field(self.name, self.value.serialize(serializer))?;
        term.end()
    }
}

Компилятор утверждает, что нет методов serialize_field и end, хотя они явно есть, да и в примере код похожий.

Спасибо.

  1. Попробуй потыкать это

Макрос - это хорошо, но хотелось бы понять как это сделать руками.

Посмотрел внимательнее - это не совсем то, что нужно. Макрос сериализует реальный тип трейта для последующей десериализации. Мне это не нужно (пока, во всяком случае). По сути, мой первый вопрос сводится к тому, как засунуть трейт в вектор. Напрямую не получится, поскольку неизвестен размер конкретного объекта. А вот почему с Box не работает - я не могу понять.

  1. https://github.com/dtolnay/erased-serde#serialization
  2. https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=2ffaf931cf58c4cb1af835c9fb733b09