Size: a a a

Rust — русскоговорящее сообществo

2020 November 10

SL

S. L. in Rust — русскоговорящее сообществo
источник

SL

S. L. in Rust — русскоговорящее сообществo
у кого-то была такая проблема?
источник

MP

Mag Pie in Rust — русскоговорящее сообществo
Max Frai
А есть примеры куда глянуть?
источник

MF

Max Frai in Rust — русскоговорящее сообществo
impl Serialize for Data {
   fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
   where S: Serializer,
   {
       // ?
   }
}

Подскажите как применить сериализацию по-умолчанию, но добавить пару полей? Вот я вижу в serializer есть serialize_struct, но после этого мне придется вручную все поля прописывать структуры
источник

Р

Рик Огурчик... in Rust — русскоговорящее сообществo
Max Frai
impl Serialize for Data {
   fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
   where S: Serializer,
   {
       // ?
   }
}

Подскажите как применить сериализацию по-умолчанию, но добавить пару полей? Вот я вижу в serializer есть serialize_struct, но после этого мне придется вручную все поля прописывать структуры
#[derive(Serialize)]
источник

MF

Max Frai in Rust — русскоговорящее сообществo
Да, но я тогда не смогу добавить кастомную логику для сериализации
источник

MF

Max Frai in Rust — русскоговорящее сообществo
Чтобы добавить дополнительные поля в результат
источник

D

Denis in Rust — русскоговорящее сообществo
Max Frai
Чтобы добавить дополнительные поля в результат
сделай обёртку
источник

MF

Max Frai in Rust — русскоговорящее сообществo
Как?
источник

MF

Max Frai in Rust — русскоговорящее сообществo
Добавить еще одну структуру? Но мне везде нужно оперировать первой структурой
источник

D

Denis in Rust — русскоговорящее сообществo
Max Frai
Добавить еще одну структуру? Но мне везде нужно оперировать первой структурой
use serde::{Serialize, Deserialize};

#[derive(Serialize, Deserialize)]
struct MainType {
   a: u8,
   kek: String,
}

#[derive(Serialize, Deserialize)]
struct IntermediateType {
   #[serde(flatten)]
   main: MainType,
   aux: usize,
}


и сериализацию/десериализацию делай через IntermediateType
источник

D

Denis in Rust — русскоговорящее сообществo
(можно и без flatten)
источник

MF

Max Frai in Rust — русскоговорящее сообществo
Но везде все функции возвращают MainType
источник

D

Denis in Rust — русскоговорящее сообществo
а
источник

D

Denis in Rust — русскоговорящее сообществo
Max Frai
Но везде все функции возвращают MainType
источник

MF

Max Frai in Rust — русскоговорящее сообществo
Ага, получается в intermediate структуре всегда приедтся вручную те же поля прописывать, что и в основной, да?
источник

D

Denis in Rust — русскоговорящее сообществo
Max Frai
Ага, получается в intermediate структуре всегда приедтся вручную те же поля прописывать, что и в основной, да?
ну а как иначе-то :( но конечно можно сделать макрос, который бы это делал за тебя :)
источник

MF

Max Frai in Rust — русскоговорящее сообществo
Ну я надеялся, что можно как-то в сериализации взять self, перевести его в какой-то образно Value (как в json)
источник

MF

Max Frai in Rust — русскоговорящее сообществo
И туда сделать add_field и вернуть результат
источник

D

Denis in Rust — русскоговорящее сообществo
в serde сериализация отделена от формата
источник