Хабр

Serde в Rust: как отсутствующее поле JSON незаметно отключало настройки приложения

Serde в Rust: как отсутствующее поле JSON незаметно отключало настройки приложения

В Rust есть немало способов выстрелить себе в ногу, даже когда компилятор доволен, тесты проходят, а приложение работает без ошибок. Иногда для этого достаточно одного атрибута, который делает ровно то, что написано в документации.

При разработке NetRuleRouter столкнулся с довольно странным поведением. Две настройки должны были быть включены по умолчанию, но после обмена данными между компонентами приложения оказывались выключенными. При этом JSON успешно обрабатывался, ошибок десериализации не возникало, а подозрительные значения выглядели совершенно допустимыми.

Причина оказалась не в Qt, не в IPC и даже не в ошибке библиотеки. Проблема скрывалась в том, как обычное отсутствие поля превращалось в конкретное значение.

Разобраться помог Serde — один из наиболее распространённых инструментов сериализации в экосистеме Rust. Причём позднее похожая ситуация обнаружилась уже при диагностике сетевых адаптеров, где цена неправильного значения могла быть значительно выше, чем просто сброшенная настройка.

Читать далее

🚀 Ускорьте работу вашего бизнеса

Корпоративный Яндекс Браузер с усиленной защитой данных и встроенными нейросетями. Официальная сборка для юридических лиц и ИП.

Скачать бесплатно