Форум программистов, компьютерный форум, киберфорум
Rust
Войти
Регистрация
Восстановить пароль
Другие темы раздела
Rust Как обменять объекты пользовательского типа в Rust https://www.cyberforum.ru/ rust/ thread2706432.html
Довольно долго занимался программированием, пересмотрел много разных языков и со многими довелось поработать, а сейчас вот захотел попробовать разобраться с языком rust. Так уж сложилось, что я...
Убийца Rust Rust
Пока программисты C++ думаю станет ли Rust тем языком, который сможет потеснить плюсы и занять их нишу, сам Rust уже пятый год подряд становится самым любимым языком у пользователей StackOwerflow. А...
не могу собрать проект Rust
Собираю под WSL. Для linux сборка проходит успешно. А для windows c ошибкой. max@pc0:~/rust-to-cpp$ cargo build --release --target x86_64-pc-windows-gnu Compiling rust-to-cpp v0.1.0...
Rust Rust не хватает функциональности? Rust вобрал в себя немало из функциональных языков, но ему, по-моему мнению, все же функциональности не достает. Простой пример: вы почему-то захотели написать свою функцию swap, которая меняет... https://www.cyberforum.ru/ rust/ thread2691156.html
Rust Можно ли создать неинициализированный массив? Кроме как let arr: [Option<u8>; 3] = [None; 3]; https://www.cyberforum.ru/ rust/ thread2674737.html
Доброго времени суток. Пример на Си: int main() { uint8_t arr; arr = 42; printf("%d\n", arr); } Создаётся неинициализованный массив, записывается одно значение и выводится.
Rust Даны три точки A, B, C на числовой оси. Найти длины отрезков AC и BC и их сумму
Добрый день:) Помогите, пожалуйста, составить программу. Нуждаюсь в помощи от умных и добрый пользователей) Спасибо!
Rust VsCode и Rust проблема с точками останова
Всем привет. Начал изучать Rust, столкнулся с такой проблемой: в VsCode не срабатывают точки останова. Использую вот такую конфигурацию С/C++: { "name": "(Windows) Запустить", ...
Rust Чтение входного потока Захотелось попробовать Rust в решение простеньких задачек, но удобного ввода данных не нашлось, пришлось своё городить. Спёр идею, но сделал по своему. В целом, оно работает, но хотелось бы не... https://www.cyberforum.ru/ rust/ thread2667306.html
Rust Frontend Для RUST https://www.cyberforum.ru/ rust/ thread2569161.html
Нужна помощь! Есть класс Participant, в этом классе есть функция new. impl Participant { /// Create a new `Participant`. pub fn new( &pub_key: &PublicKey, name: &str, ...
Rust Как перестать бороться с компилятором Rust уже довольно долго пытаюсь изучать язык Rust но большую часть времени я борюсь с компилятором. и вроде бы абсолютно безопасный код никак не хочет компилироваться. скорей всего это и за того что я... https://www.cyberforum.ru/ rust/ thread2541102.html
Rust Как установить RUST без VS? https://www.cyberforum.ru/ rust/ thread2496482.html
везде мануалы построены на установке визуал студии, но она много весит у меня не хватит места на ссд, есть ли другие способы установки RUST? точнее сам RUST я установил, что он хочет взять из VS...
Rust Rust ошибка E0623 при компиляции появляется ошибка E0623 в документации этот номер пропущен. в чём может быть проблема? ошибка: error: lifetime mismatch --> src\main.rs:51:11 | 48 | fn load(scene:&mut... https://www.cyberforum.ru/ rust/ thread2482635.html
Просто Лис
Эксперт Python
4246 / 2656 / 911
Регистрация: 17.05.2012
Сообщений: 7,916
Записей в блоге: 9
0

[serde] Валидация длины строки при сериализации структуры

04.01.2021, 14:03. Просмотров 602. Ответов 1
Метки (Все метки)


Доброго времени суток.

Есть такая структура, которая успешно сериализуется в xml:
C#
1
2
3
4
5
6
7
8
9
10
11
12
/// Блок авторизации
#[derive(Debug, Serialize)]
pub struct AuthData {
    /// 
    #[serde(rename = "Login", default)]
    // max_length = 50
    pub login: String,
    /// Пароль
    #[serde(rename = "Pass", default)]
    // max_length = 50
    pub pass: String,
}
Однако, сейчас не проверяется длина строки. Можно ли как-нибудь добавить проверку перед сериализацией или в конструктор структуры?

Пока только такая идея в голову пришла:
C#
1
2
3
4
5
6
7
impl AuthData {
    fn new(login: String, pass: String) -> Self {
        assert!(login.len() <= 50);
        assert!(pass.len() <= 50);
        Self { login, pass }
    }
}
Добавлено через 2 часа 56 минут
В итоге прикрутил валидацию так:
C#
1
2
3
4
5
6
7
8
9
10
11
/// Блок авторизации
#[derive(Debug, Validate, Serialize)]
pub struct AuthData {
    #[validate(length(max = 50))]
    #[serde(rename = "Login", default)]
    pub login: String,
    /// Пароль
    #[validate(length(max = 50))]
    #[serde(rename = "Pass", default)]
    pub pass: String,
}
Больше макросов богу макросов! https://crates.io/crates/validator (правда, функцию валидации придётся вызывать вручную перед сериализацией)

Вернуться к обсуждению:
[serde] Валидация длины строки при сериализации структуры
2
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.01.2021, 14:03
Готовые ответы и решения:

Строки конечной длины в полях структуры. Файловое чтение-запись
Переделываю под QT еще Дельфевый вариант программы хранящей данные в т.н. типизированном файле...

Перенос строки в Memo1 при достижении определённой длины строки
Здравствуйте. помогите. забуксовал. как правильно перенести строку в Memo1 при достижении...

Ошибки (в файле содержатся строки разной длины - записать их в выходной файл в порядке возрастания длины строки)
#include &lt;iostream&gt; #include &lt;set&gt; #include &lt;iterator&gt; #include &lt;fstream&gt; #include &lt;string&gt;...

Получить последовательность содержащую строки из A длины L1 и все строки из B длины L2 (используя LINQ)
Даны целые положительные числа L1 и L2 и строковые последовательности A и B. Строки...

1
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.