These are chat archives for kstep/vkrs

7th
Mar 2016
Sergei Maximov
@smaximov
Mar 07 2016 12:44
Привет.
Konstantin Stepanov
@kstep
Mar 07 2016 12:45
привет
Sergei Maximov
@smaximov
Mar 07 2016 12:45
Хочу реализовать некоторые методы из messages, возникли некоторые вопросы.
Konstantin Stepanov
@kstep
Mar 07 2016 12:46
да?
Sergei Maximov
@smaximov
Mar 07 2016 12:48
1 - Что будет, если у Response-объекта не будет некоторых полей? Будет ли ошибка при десериализации?
Konstantin Stepanov
@kstep
Mar 07 2016 12:50
Не будет, если тип поля Option<T>. Для этого оно и проставлено в некоторых местах, например в photos.rs.in.
Sergei Maximov
@smaximov
Mar 07 2016 12:53
2 - Касательно реализации типа Message: у него есть куча полей, которые присутствуют только для сообщений из чата (chat_id, chat_active, etc.). Их все нужно делать Option'ами или можно определить структуру типа GroupChatExtra, в которой будут определены эти поля, а в Message сделать поле group_chat_extra: Option<GroupChatExtra>?
По поводу 1, я немного неправильно выразился: что будет, если в ответе от сервера будет какое-то поле, которое не будет определено в Response-типе?
Konstantin Stepanov
@kstep
Mar 07 2016 13:23
Если будет поле, которого нет в response-типе, то будет ошибка.
Если хочется выделить опциональные поля в отдельное поле, то конечно можно так сделать, но придётся самому писать десериализатор.
Sergei Maximov
@smaximov
Mar 07 2016 13:24
Спасибо.
Konstantin Stepanov
@kstep
Mar 07 2016 13:25
Про отсутствующие поля соврал.
Недавно только serde 0.7 вышел, пришлось на него переходить.
Если есть поле, которого нет в структуре, то оно проигнорируется.
Sergei Maximov
@smaximov
Mar 07 2016 13:25
Ок.
Konstantin Stepanov
@kstep
Mar 07 2016 13:26
Если структура помечена атрибутом #[serde(deny_unknown_fields)], то будет ошибка.
Sergei Maximov
@smaximov
Mar 07 2016 13:26
Проще будет написать минимально работающую версию.
Konstantin Stepanov
@kstep
Mar 07 2016 13:26
Я так и делаю пока что =)
Задача минимум: представить все запросы в библиотеке.
А дальше уже обрабатывать напильником.
Sergei Maximov
@smaximov
Mar 07 2016 13:29
Ещё вопрос: если в доках к VK API пишется number, то мы берём u64/i64?
Konstantin Stepanov
@kstep
Mar 07 2016 13:30
Для *id полей есть тип api::Id
Sergei Maximov
@smaximov
Mar 07 2016 13:30
Не, я имею в виду в общем случае.
Konstantin Stepanov
@kstep
Mar 07 2016 13:31
Отрицательные числа используются для owner_id, тогда тип api::OwnerId. В общем случае u64/i64, да. Для count/offset usize (поскольку это по сути индексы, а для индексов в Rust принят тип usize).
Sergei Maximov
@smaximov
Mar 07 2016 13:31
Ок.
Sergei Maximov
@smaximov
Mar 07 2016 14:03
Ничего, если я добавлю к зависимостям bitflags для битовых флагов?
Konstantin Stepanov
@kstep
Mar 07 2016 14:04
Для чего?
Sergei Maximov
@smaximov
Mar 07 2016 14:07
Например, тут есть параметр filters, в котором задаётся фильтр в виде битовой маски. Было бы удобно задавать этот параметр как .filters(Unread | NonChat).
Konstantin Stepanov
@kstep
Mar 07 2016 14:14
Хм, забавно. В русской документации упомниается только флаг 8 ­— важные сообщения. В английском варианте описаны флаги 1, 2 и 4, но не 8.
Sergei Maximov
@smaximov
Mar 07 2016 14:15
А там где-нибудь написано, для какой версии документация?
Konstantin Stepanov
@kstep
Mar 07 2016 14:16
Явно нет, но как я понял по умолчанию считается что для последней версии (сейчас 5.45), потому что всякие уточнения обычно дополнительно описываются в виде «а для версий ниже 3.0 поля называются так-то»
Вообще я хотел избежать зависимости от bitflags, потому что ИМХО оно больше подходит для низкоуровневого FFI, да и не нравится мне идея кучи констант, которые связаны только общим типом.
Чаще enum выглядит лучше.
Пока битовые флаги встречались только для описания прав.
В Messages первый раз вот встретились в частном АПИ.
Но может быть в данном случае оно подойдёт. Попробуй, посмотрим как оно будет выглядеть.
Sergei Maximov
@smaximov
Mar 07 2016 14:23
Ок. Если взлетит, можно будет потом подумать о том, чтобы использовать bitflags! для генерации Permissions.
При этом как минимум реализация FromIterator будет из коробки.