Что эквивалентно переходному процессу Java в Serde? - PullRequest
6 голосов
/ 04 апреля 2019

Я заинтересован в том, чтобы переменная не сериализовалась автоматически (например, Serde) с использованием ключевого слова, подобного Java transient, но в Rust.Мне нужно это для хранения паролей.Конечно, я мог бы вручную очистить данные после сериализации на диск, но я хотел бы знать, есть ли лучшие, более автоматические варианты.

1 Ответ

10 голосов
/ 04 апреля 2019

Вы можете использовать атрибут #[serde(skip)]:

use serde::{Deserialize, Serialize}; // 1.0.88

#[derive(Deserialize, Serialize)]
struct MyStruct {
    field1: i32, // this will be (de)serialized
    #[serde(skip)]
    field2: i32, // this will be skipped
}

Если тип должен быть сериализован de , рекомендуется сопровождать #[serde(skip)] с атрибутом #[serde(default)] (или #[serde(default = "fn_name")]).Serde десериализует пропущенные поля, как если бы неявно добавлялось #[serde(default)], но для кого-то понятнее, если кто-то читает ваш код, если вы явно укажете, откуда будет получено это значение.

См .:

...