#include <google/protobuf/compiler/plugin.h>
namespace google::protobuf::compiler
Front-end para plug-ins do gerador de código protoc escrito em C++.
Para implementar um plug-in protoc em C++, basta escrever uma implementação de CodeGenerator e criar uma função main() como:
int main(int argc, char* argv[[]]) { MyCodeGenerator generator; return google::protobuf::compiler::PluginMain(argc, argv, &generator); }
Vincule seu plug-in a libprotobuf e libprotoc.
A parte principal do PluginMain é invocar o CodeGenerator fornecido em um CodeGeneratorRequest para gerar um CodeGeneratorResponse. Essa parte é abstraída e transformada na função GenerateCode para que possa ser reutilizada, por exemplo, para implementar uma variante de PluginMain que faz algum pré-processamento no CodeGeneratorRequest de entrada antes de alimentar a solicitação para o gerador de código especificado.
Para que o protoc use o plug-in, siga um destes procedimentos:
- Coloque o binário do plug-in em algum lugar no caminho e dê a ele o nome "protoc-gen-NAME" (substituindo "NAME" pelo nome do seu plug-in). Se você invocar protoc pelo parâmetro –NAME_out=OUT_DIR (novamente, substitua "NAME" pelo nome do seu plug-in), o protoc invocará seu plug-in para gerar a saída, que será colocada em OUT_DIR.
-
Coloque o binário do plug-in em qualquer lugar, com qualquer nome, e transmita o parâmetro –plugin para protoc para direcioná-lo ao seu plug-in da seguinte maneira:
protoc --plugin=protoc-gen-NAME=path/to/mybinary --NAME_out=OUT_DIR
No Windows, inclua o sufixo .exe:
protoc --plugin=protoc-gen-NAME=path/to/mybinary.exe --NAME_out=OUT_DIR
Turmas neste arquivo |
---|
Participantes do arquivoEssas definições não fazem parte de nenhuma classe. | |
---|---|
int | PluginMain(int argc, char * argv, const CodeGenerator * generator) Implementa main() para um plug-in protoc que expõe o gerador de código fornecido. |
bool | GenerateCode(const CodeGeneratorRequest & request, const CodeGenerator & generator, CodeGeneratorResponse * response, std::string * error_msg) Gera código usando o gerador de código fornecido. mais… |
bool compiler::GenerateCode(
const CodeGeneratorRequest & request,
const CodeGenerator & generator,
CodeGeneratorResponse * response,
std::string * error_msg)
const CodeGeneratorRequest & request,
const CodeGenerator & generator,
CodeGeneratorResponse * response,
std::string * error_msg)
Gera código usando o gerador de código fornecido.
Retornará "true" se a geração do código for bem-sucedida. Se a geração do código falhar, error_msg pode ser preenchido para descrever a causa da falha.