TGStat
TGStat
Введите текст для поиска
Расширенный поиск каналов
  • Язык сайта
    flag Russian flag English flag Uzbek
  • Вход на сайт
  • Каталог
    Каталог каналов и чатов Региональные подборки Тематические подборки Платные каналы Поиск каналов
    Добавить канал/чат
  • Рейтинги
    Рейтинг каналов Рейтинг чатов Рейтинг публикаций
    Рейтинги брендов и персон
  • Аналитика
  • Поиск по публикациям
  • Мониторинг Telegram
  • Продвижение
    Реклама через Яндекс Бизнес Реклама в каналах через TGStat Agency Реклама на сайте TGStat.ru
nikalexxx

21 Mar, 18:44

Открыть в Telegram Поделиться Пожаловаться

Prev Next
Несомненный плюс пет-проектов в том, что там не обязательно следовать всем правилам расширяемого кода и можно захардкодить решения. Мне не подошёл опенсорсный protoc плагин к mongo, так как требовал указания аннотаций, поэтому я написал свой.

Проект у меня на go, и так как grpc интерфейсы получаются кодгеном через официальный плагин, есть и плагин под кастомный код, где можно работать уже со структурами прото и не надо парсить файлы.

Но есть и особенности, например нет многих хелперов (или я плохо искал), поэтому например proto сообщение для map я ищу в файле просто двумя циклами (даже не рекурсией), так как у меня нет вложенных message (первая картинка).

Для шаблонов использовал классический text/template, на второй картинке результат кодогенерации, на третьей кусок шаблона для этого кода.

Это написал я на прошлых выходных, потому что стало много grpc сервисов и надоело перекладывать руками. Могу сказать, что писать плагины для прото таким способом совсем несложно, особенно под себя. У меня например шарятся enum, убираются указатели кроме optional полей и перекладывается поле id для монговского _id. По итогу просто вызываю метод ToProto() и радуюсь жизни.

Наверно в каком-нибудь zig (или даже rust с его макросами) это всё удобнее. Но так как писать кодген очень быстро, текущее решение мне вполне подходит. Хотя потом там особенности возникают на стыке кодгена и дженериков (ограничения на параметры дженериков элегантно не написать, нужно догенерить небольшую функцию обёртку, которая через аргументы делает switch case).

349 0 1 7 5
Каталог
Каталог каналов и чатов Подборки каналов Поиск каналов Добавить канал/чат
Рейтинги
Рейтинг каналов Telegram Рейтинг чатов Telegram Рейтинг публикаций Рейтинги брендов и персон
API
API статистики API поиска публикаций API Callback
Наши каналы
@TGStat @TGStat_Chat @telepulse @TGStatAPI
Почитать
Академия TGStat Исследование Telegram 2019 Исследование Telegram 2021 Исследование Telegram 2023
Контакты
Справочный центр Поддержка Почта Вакансии
Всякая всячина
Пользовательское соглашение Политика конфиденциальности Публичная оферта
Наши боты
@TGStat_Bot @SearcheeBot @TGAlertsBot @tg_analytics_bot @TGStatChatBot