Ревью: derive-макросы для структур

Понадобилось мне сделать всякие инкрементальные счетчики в приложении. Завел несколько структур с числовыми полями под каждый тип счетчика (т.е. каждая структура содержит свой набор счетчиков). Счетчики инкрементируются локально в треде, периодически скидываются в глобальные структуры. Происходит это через сложение полей локальной структуры с соответствующими полями глобальной. Потом специальной поток конвертит структуры в строку (в формате https://github.com/statsite/statsite#protocol, но не суть) и отправляет куда надо.

Поскольку счетчиков изрядное количество, накидал пару derive-макросов:

Буду рад замечаниям и предложениям (можно и по исходной задаче)

1 лайк

Привет! Если “входные данные” для макроса неправильные, принято возвращать compile_error!(...) — это позволяет компилятору указать место, где вызывается макрос. Наверное, удобно будет сделать fn prepare(TokenStream) -> Result<TokenStream, TokenStream>, и возвращать Err(quote!{ compile_error!("Error message") }) при ошибке.
Не знал, что quote! умеет разворачивать #( ... )* из итераторов :slight_smile:
И ещё: почему у тебя идентация в 8 пробелов? Дико выглядит

Спасибо за совет, переделал обработку ошибок.

Отступы у меня табами были (с отображением по четыре пробела). Переформатировал на пробелы.

1 лайк