172 похожих чатов

А есть какой-нибудь способ по тип-параметру узнать, скалярный он или

коллекция? Может трейт какой-то попросить?

pub fn next_opt<T: for<'de> Deserialize<'de>>(
arg: Option<serde_json::Value>,
) -> Result<Option<T>>


хочу десериализовывать из Value Option<T> по такому принципу:

`T` or `[T]` => Some(T)
`None` or `[]` => None
array of several elements => error

но есть проблемка:
- на next_opt<String>(Some(json!( ["a"] ))) мне нужно раскрывать массив прежде чем десериализовывать
- а на next_opt<Vec<String>>(Some(json!( ["a"] ))) раскрывать массив не нужно, нужно десериализовывать из массива тк T это массив

Как быть?

13 ответов

21 просмотр

Сделать свой трейт. Реализовать его для String и Vec<String>, требовать его в next_opt

Коллекции обычно итератор реализуют

folex- Автор вопроса
Пух
Коллекции обычно итератор реализуют

ну я же не могу это узнать в рантайме? Могу либо потребовать итератор, либо не требовать, т.е. это путь с next_opt_scalar и next_opt_collection

Вообще такое скорее всего через свой десериализатор пилить надо

red75prime
Сделать свой трейт. Реализовать его для String и V...

Реализовать разную обработку для T и Vec<T> пока не получится. Для этого нужна специализация. Поэтому String и Vec<String>

folex- Автор вопроса
Пух
Вообще такое скорее всего через свой десериализато...

подозреваю что там вылезет похожая проблема

folex- Автор вопроса
Пух
Untagged enum же как-то десериализуют

перебирает варианты просто

pl hk
перебирает варианты просто

Ну тут так же примерно можно

folex- Автор вопроса
pl hk
перебирает варианты просто

пробует, ловит ошибку, пробует следующий?

folex
пробует, ловит ошибку, пробует следующий?

Serde will try to match the data against each variant in order and the first one that deserializes successfully is the one returned. https://serde.rs/enum-representations.html#untagged

folex- Автор вопроса
pl hk
Serde will try to match the data against each vari...

Угу, это я знаю, просто думал вдруг вы знаете как оно реализовано :) Через перехват ошибки или как-то умнее спасибо!

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта