Tinkoff / investAPI

399 stars 136 forks source link

gRPC генерирует namespace "public" на с++ #84

Open yelowt opened 2 years ago

yelowt commented 2 years ago

Добрый день! При генерации с++ кода по investAPI proto файлам package tinkoff.public.invest.api.contract.v1; генерирует namespace public. Полученный код не собирается. Естественно, при коррекции package tinkoff.invest.api.contract.v1; Код собирается, но такая удаленная процедура UNIMPLEMENTED.

AlexanderVolkovTCS commented 2 years ago

Добрый вечер, да, есть проблема, думаем как решить

yelowt commented 2 years ago

Спасибо! Буду ждать решения

AlexanderVolkovTCS commented 2 years ago

Попробуем закинуть pull request в репозиторий grpc-cpp генератора, по пока в качестве временной меры попробуйте удалить из сгенерированного кода упоминания ::public и namespace public

malyginvv commented 2 years ago

Добрый день! В качестве временного решения можно использовать автозамену namespace public на namespace public_ и ::public на ::public_ в сгенерированных файлах. Например с помощью команды в каталоге с этими файлами:

sed -i '' 's/namespace public/namespace public_/g; s/::public/::public_/g' *.pb.*  

Автозамена потребуется после каждой генерации файлов.

yelowt commented 2 years ago

Добрый день! Сделал замену ::public на ::public_ в сгенерированных файлах. Код собирается. Но при вызове функций API (например Currencies) все та же ошибка {"error": "12 UNIMPLEMENTED: "}

malyginvv commented 2 years ago

В файле instruments.grpc.pb.cc в массиве InstrumentsService_method_names случайно ничего не изменилось? Там есть строка "/tinkoff.public.invest.api.contract.v1.InstrumentsService/Currencies"?

yelowt commented 2 years ago

Добрый день! Предложенное временное решение заработало. Спасибо!

ivtst1 commented 2 years ago

Аналогичная проблема, но с QtProtobuf. Автоматизировать, пока рано. Делаю замену в .proto файлах с package tinkoff.public.invest.api.contract.v1; на package tinkoff.api; В сгенерированных исходниках прописываю автозаменой по всем нужный путь к методам по апи. С чисто плюсовой версией приходится править все руками. Есть идея сгенерить на чистый С, и под него уже обертку на плюсах написать, но еще не пробовал. Ну и REST, как в v1, на крайний случай.

AlexanderVolkovTCS commented 2 years ago

https://github.com/protocolbuffers/protobuf/issues/9058 вопрос в protocolbuffers закинули, будет здорово, если тоже отметитесь там