Loyd
Ааа, у тебя разделителя нет
Tuntz
ага
Tuntz
packet_parse_result: alt!( tag!("getchallenge") => { |b| Ok((b, Packet::ChallengeRequest)) } | tag!("connectResponse") => { |b| Ok((b, Packet::ConnectResponse)) } | tag!("challengeResponse") => { parse_challenge_response } ) >> (packet_parse_result.map(|(_b, data)| data)?)
Loyd
Так не получится же
Loyd
https://docs.rs/nom/4.0.0-alpha2/src/nom/branch.rs.html#220
Loyd
После => ожидается функция, которая принимает только o. То есть i оттуда не получить
Tuntz
оно собирается, но не знаю будет ли работать - будут приколы с передвижением указателя по массиву данных
Tuntz
короче, проще сделать прокладку в виде PacketType и доп. свича и не париться
Loyd
Формат твой?
Tuntz
протокол т.е.?
Loyd
yep
Tuntz
упаси боже байтоёбство городить - я пишу парсер сетевого протокола Quake III Arena и производных
Loyd
Хм. https://github.com/Geal/nom/issues/627
Loyd
То есть возможность брать самый длинный у них есть. Это бы решило довольно сильно проблему для кейса alt с кучей do_parse
Loyd
Я, правда, не вижу ниже такого в switch (
Loyd
@vorot93 return_error есть
Loyd
Это аля cut-а прологовского
Loyd
В целом, если ставить после tag! в конструкции с do_parse внутри alt, то проблему с ошибками решает
Anton
ребят
Anton
короче вариант с дефолтными значениями для serde не проканал
Anton
нашел проблему довольно большую
Anton
значения нужно подставлять по мере их добавления, тоесть если значения нет, его не нужно добавлять вообще
Anton
ибо в опциях стандартных флексов нет возмодности поставить во многих "значение по умолчанию" в итоге лайаут крашится
Anton
сначала подумал сделать чтото типо Option чтобы потом несуществующие поля можно было чекать, и потом в методе получения готового значения сделать сверку и мол если есть добавить
Anton
в итоге я на распутье что вообще делать
Anton
возвращатся обратно к Value чтоле
Anton
и если так - то проблема стоит в тмо что как тогда при итерации Value кастовать типы к тому что есть
Anton
тоесть есть у меня положим там enum,как его скастоватоь и проверить
Anton
крч жопа
Anton
Итак вопрос, можно ли использовать Option в serde как untaged, чтобы маркировать что мол если значения нет то None если есть то вернуть Some проставленного типа, с проверкой
Anton
и второй вопрос - если нет ответа на первый, как кастовать и проверять соответствие типу с Serealize относительно голого Value
պլհկ
https://docs.rs/serde_json/1.0.17/serde_json/fn.from_value.html
Anton
https://docs.rs/serde_json/1.0.17/serde_json/fn.from_value.html
и на вскидочку вопрос, serde не умеет в чистый Option?
պլհկ
Че за чистый
Anton
Тоесть нельзя чтобы он несуществующее значение как None обрабатывал, а провалидированное как Some(T)
Anton
тобишь структура типо #[derive(Deserialize)] struct A{ field: Option<MyType> }
պլհկ
Дефолт=ноне пишешь над полем
Anton
А
Anton
тоесть работает норм так
Anton
окей спасибо
Tuntz
@ployd пока тупо сделал с PacketType: https://github.com/rust-game-parsers/q3a/blob/master/src/lib.rs
Loyd
Дублирование не радует, конечно
Loyd
В сторону return_error посмотрел?
Tuntz
не
Tuntz
потом посмотрю когда напишу тесты
Anton
Ееее
Anton
Байтики
Tuntz
ага
Tuntz
времена когда не было ни json, ни протобафа
Anonymous
В геймдеве и сейчас в неткоде не используется ни json, ни протобаф
Anonymous
А flat buffers ?
Обычно что-нибудь кастомное, похожее на bincode
Golodnyi
https://www.ozon.ru/context/detail/id/144056219/ кто нить читал?
Cat
да, говорят перевод не очень
Cat
t.me/rustlang_ru/123884
Golodnyi
ну вроде не художественная литература, перевод не так критичен
Маjко
Еще критичнее
Маjко
Так то
Маjко
Терминология, итд
Golodnyi
там терминологию перевели?)
Golodnyi
ну тогда кроме знаний, еще и ложка юмора будет
Маjко
Вангую, что да. Посмотри на перевод первой книги от rustycrate
Маjко
Там переведены термины
Маjко
Выглядит так себе
Loo
то есть типаж вместо трэйта - так себе?
Маjко
Зачем тебе перевод, читай в оригинале вторую книгу Это не художественная литература, как ты сам сказал)
Cat
O'Reilly тоже есть дамнутый на английском (если уж очень хочется)
Golodnyi
май инглиш из вери бед
Golodnyi
я в принципе техническую литературу по пол года читаю, на инглише буду полтора года читать
vladislav
там же всё понятно
vladislav
rust book очень простым английским написана
კაცი
rust book очень простым английским написана
инкрементирую этого оратора. читается очень легко.
vladislav
Техническая литература в принципе не очень сложная, главное с терминологией разобраться
Golodnyi
ну я рад за ваш английский)
Golodnyi
в мое время в школах учили плохо, а самоорганизации в сторону иностранных языков я так и не нашел, читать могу, но это сильноо менее приятно, чем на родном
Golodnyi
языки неплохо учатся и просто по примерам кода, если на то пошло
Латентный Бурят
языки неплохо учатся и просто по примерам кода, если на то пошло
Сказать бы так новичку в C++ посмотреть на примеры реализаций рефлексий.