TOML. Мне понадобилось строковое поле заменить на массив строк, чтобы работать не с одним файлом, а с несколькими.
Я добавил поле Vec<String>, а поле типа String пометил как #[deprecated], ну и в коде загрузки сделал два варианта загрузки, чтобы дать юзерам постепенно обновить конфиги.
Теперь некоторые юзеры мне пишут "аааа, там ворнинги при сборке!".
Что в таких ситуациях делать лучше?
ну.. можно сделать #[derive(Serialize, ...)]#[serde(untagged)]enum StringOrArray { One(String), Array(Vec<String>) }, тогда в конфиге может будет указывать как один String, так и Vec<String>
Ух тыы! А это интересно!
https://serde.rs/enum-representations.html#untagged тут подробней можно почитать
Это потом надо по коду обрабатывать. Я бы в таком случае лучше просто дескриализатор написал руками, который строку в вектор положит
ну нормально
Заведи поле с версией конфига и меняй ее при нужде, и в зависимости от нее читай настройки
Обсуждают сегодня