Официальный блог GRPC показывает пример подключения настраиваемого маршаллера в Java с JSON:
HTTPS://grpc.io/blog/grpc-thith-json/
Однако я не могу найти какую-либо эквивалент "Marshaller" в C+ lection grp. Или любая информация о том, как работать с Grpc ++ без .proto
Мои вопросы:
Как я могу предоставить свой собственный сериализатор/десериализатор (json) для запроса/ответных сообщений в c ++ grpc или SeratizationTraits Определения? Могу ли я зарегистрировать сервис и методы вручную, обходя при этом Generation Protoc ? Документация, GitHub Repo с чем -то подобным, фрагмент тоже подойдет. />
Что я сделал /попробовал до сих пор < /p>
Код: Выделить всё
template
class grpc::SerializationTraits {
public:
static grpc::Status Serialize(const nlohmann::json& json,
grpc::ByteBuffer* buffer,
bool* own_buffer) {
std::string s = json.dump();
grpc::Slice slice(s.data(), s.size());
*buffer = grpc::ByteBuffer(&slice, 1);
*own_buffer = true;
return grpc::Status::OK;
}
static grpc::Status Deserialize(grpc::ByteBuffer* buffer,
nlohmann::json* json) {
std::vector slices;
buffer->Dump(&slices);
std::string data;
for (auto& s : slices) {
data.append(reinterpret_cast(s.begin()), s.size());
}
try {
*json = nlohmann::json::parse(data);
} catch (const std::exception& e) {
return grpc::Status(grpc::StatusCode::INTERNAL,
std::string("JSON parse error: ") + e.what());
}
return grpc::Status::OK;
}
};
Я попытался использовать Grpc :: service и позвонить в AddMethod, но я застрял в последнем аргументе: rpcmethodhandler. Я не уверен, что туда пройти или как правильно зарегистрировать службу, когда я не сгенерировал заглушки. Cmake, кажется, все еще требует этого, даже если я не намерен использовать его. Единственные два варианта - это модуль и пакет, которые просто контролируют, откуда я получаю эту зависимость, и, хотя и не обязательны, приложения GRPC обычно используют буферы протокола, подразумевает, что я могу ее удалить.
Подробнее здесь: https://stackoverflow.com/questions/797 ... ialization