Как я могу десериализовать значение в структуру с этим значением и PhantomData в Serde?

Мне нужна дополнительная информация о типе URL-адреса, поэтому я создал структуру UrlWithPhantomdata с полем значения для URL-адреса и полем PhantomData. Как я могу десериализовать строку в эту структуру с помощью Serde?

Более конкретно, учитывая этот объект JSON:

{
  "url": "https://example.com"
}

Как я могу десериализовать его в следующую структуру ApiData?

#[derive(Deserialize)]
pub struct ApiData {
    url: UrlWithPhantomdata<i32>
}

#[derive(Deserialize)]
pub struct UrlWithPhantomdata<T> {
    #[serde(with = "url_serde")]
    url_value: Url,
    #[serde(skip)]
    url_type: PhantomData<T>
}

Более общая проблема рассматривается в serde-rs/serde#1048, но Я ищу решение, которое работает, пока эта ошибка не будет исправлена.


person konstin    schedule 15.02.2018    source источник
comment
Вы не описали, что не так с кодом, который у вас есть. Также было бы вежливо отредактировать свой вопрос, чтобы предоставить минимальный воспроизводимый пример, чтобы каждый возможный ответчик не должен был предугадывать, что делает url_serde (или решать, нужен ли он вообще для решения основной проблемы).   -  person Shepmaster    schedule 16.02.2018
comment
К вашему примеру применены дубликаты. TL;DR: реализуйте serde::Deserialize для своего типа, десериализуйте Url (он же String) внутри этой реализации, затем создайте новое значение вашего типа с соответствующим PhantomData.   -  person Shepmaster    schedule 16.02.2018