#include <google/protobuf/compiler/code_generator.h>
namespace google::protobuf::compiler
Define a interface abstrata implementada por cada um dos geradores de código específicos da linguagem.
Turmas neste arquivo | |
---|---|
A interface abstrata de uma classe que gera o código que implementa um arquivo proto específico em uma determinada linguagem. | |
Os CodeGenerators geram um ou mais arquivos em um diretório específico. |
Participantes do arquivoEssas definições não fazem parte de nenhuma classe. | |
---|---|
typedef | GeneratorContext OutputDirectory O tipo GeneratorContext era chamado de OutputDirectory. mais... |
void | ParseGeneratorParameter(const std::string & , std::vector< std::pair< std::string, std::string > > * ) Vários geradores de código tratam o argumento de parâmetro como contendo uma lista de opções separadas por vírgulas. mais… |
std::string | StripProto(const std::string & filename) Retira ".proto" ou ".protodevel" do fim de um nome de arquivo. |
typedef compiler::OutputDirectory
O tipo GeneratorContext era chamado de OutputDirectory.
Esse typedef oferece compatibilidade com versões anteriores.
void compiler::ParseGeneratorParameter(
const std::string & ,
std::vector< std::pair< std::string, std::string > > * )
const std::string & ,
std::vector< std::pair< std::string, std::string > > * )
Vários geradores de código tratam o argumento de parâmetro como contendo uma lista de opções separadas por vírgulas.
Essa função auxiliar analisa um conjunto de pares de nome/valor delimitados por vírgula: por exemplo, "foo=bar,baz,qux=corge" analisa os pares:
("foo", "bar"), ("baz", ""), ("qux", "corge")
classe CodeGenerator
#include <google/protobuf/compiler/code_generator.h>
namespace google::protobuf::compiler
A interface abstrata de uma classe que gera o código que implementa um arquivo proto específico em uma determinada linguagem.
Vários deles podem ser registrados no CommandLineInterface para oferecer suporte a vários idiomas.
Subclasses conhecidas:
Participantes | |
---|---|
enum | Feature Sincronizar com plugin.proto. mais… |
| CodeGenerator() |
virtual | ~CodeGenerator() |
virtual bool | Generate(const FileDescriptor * file, const std::string & parameter, GeneratorContext * generator_context, std::string * error) const = 0 Gera código para o arquivo proto especificado, gerando um ou mais arquivos no diretório de saída fornecido. mais… |
virtual bool | GenerateAll(const std::vector< const FileDescriptor * > & files, const std::string & parameter, GeneratorContext * generator_context, std::string * error) const Gera o código para todos os arquivos proto fornecidos. mais… |
virtual uint64_t | GetSupportedFeatures() const Implemente isso para indicar quais recursos são compatíveis com esse gerador de código. mais… |
virtual bool | HasGenerateAll() const Ela não é mais usada, mas essa classe faz parte da biblioteca protobuf de código aberto. Por isso, ela precisa continuar mantendo vtables a mesma versão atual da biblioteca. mais… |
enum CodeGenerator::Feature {
FEATURE_PROTO3_OPTIONAL = = 1
}
FEATURE_PROTO3_OPTIONAL = = 1
}
Sincronizar com plugin.proto.
FEATURE PROTO3_OPTIONAL |
virtual bool CodeGenerator::Generate(
const FileDescriptor * file,
const std::string & parameter,
GeneratorContext * generator_context,
std::string * error) const = 0
const FileDescriptor * file,
const std::string & parameter,
GeneratorContext * generator_context,
std::string * error) const = 0
Gera código para o arquivo proto especificado, gerando um ou mais arquivos no diretório de saída fornecido.
Um parâmetro a ser transmitido para o gerador pode ser especificado na linha de comando. Ele deve ser usado para transmitir parâmetros específicos do gerador. Ficará vazio se nenhum parâmetro for fornecido. O ParseGeneratorParameter (abaixo) pode ser usado para aceitar vários parâmetros na sinalização de linha de comando de parâmetro único.
Retornará "true" se for bem-sucedido. Caso contrário, define *error como uma descrição do problema (por exemplo, "parâmetro inválido") e retorna false.
virtual bool CodeGenerator::GenerateAll(
const std::vector< const FileDescriptor * > & files,
const std::string & parameter,
GeneratorContext * generator_context,
std::string * error) const
const std::vector< const FileDescriptor * > & files,
const std::string & parameter,
GeneratorContext * generator_context,
std::string * error) const
Gera o código para todos os arquivos proto fornecidos.
AVISO: o design do gerador de código canônico produz um ou dois arquivos de saída por arquivo .proto de entrada, e não queremos incentivar designs alternativos.
Um parâmetro é fornecido conforme transmitido na linha de comando, como em |Generate()| acima.
Retornará "true" se for bem-sucedido. Caso contrário, define *error como uma descrição do problema (por exemplo, "parâmetro inválido") e retorna false.
virtual uint64_t CodeGenerator::GetSupportedFeatures() const
Implemente isso para indicar quais recursos são compatíveis com esse gerador de código.
Isso deve ser um bit OR de recursos do tipo enumerado em plugin.proto.
virtual bool CodeGenerator::HasGenerateAll() const
Ela não é mais usada, mas essa classe faz parte da biblioteca protobuf de código aberto. Por isso, ela precisa continuar mantendo vtables a mesma versão atual da biblioteca.
Quando os protobufs fazem uma alteração interruptiva da API, o método pode ser removido.
classe GeneratorContext
#include <google/protobuf/compiler/code_generator.h>
namespace google::protobuf::compiler
Os CodeGenerators geram um ou mais arquivos em um diretório específico.
Essa interface abstrata representa o diretório em que o CodeGenerator é gravado e outras informações sobre o contexto em que o Generator é executado.
Participantes | |
---|---|
| GeneratorContext() |
virtual | ~GeneratorContext() |
virtual io::ZeroCopyOutputStream * | Open(const std::string & filename) = 0 Abre o arquivo fornecido, truncando-o se houver, e retorna um ZeroCopyOutputStream que grava no arquivo. mais… |
virtual io::ZeroCopyOutputStream * | OpenForAppend(const std::string & filename) Semelhante a Open(), mas a saída será anexada ao arquivo, se existir. |
virtual io::ZeroCopyOutputStream * | OpenForInsert(const std::string & filename, const std::string & insertion_point) Cria um ZeroCopyOutputStream que insere o código no arquivo especificado no ponto de inserção especificado. mais… |
virtual io::ZeroCopyOutputStream * | OpenForInsertWithGeneratedCodeInfo(const std::string & filename, const std::string & insertion_point, const google::protobuf::GeneratedCodeInfo & info) Semelhante a OpenForInsert, mas se info não estiver vazio, abrirá (ou criará) nomedoarquivo.pb.meta e inserirá informações no lugar apropriado com os deslocamentos necessários. mais... |
virtual void | ListParsedFiles(std::vector< const FileDescriptor * > * output) Retorna um vetor de FileDescriptors para todos os arquivos que estão sendo compilados nessa execução. mais… |
virtual void | GetCompilerVersion(Version * version) const Recupera o número da versão do compilador de protocolo associado a esse GeneratorContext. |
virtual io::ZeroCopyOutputStream *
GeneratorContext::Open(
const std::string & filename) = 0
GeneratorContext::Open(
const std::string & filename) = 0
Abre o arquivo fornecido, truncando-o se houver, e retorna um ZeroCopyOutputStream que grava no arquivo.
O autor da chamada se torna o proprietário do objeto retornado. Esse método nunca falha (um stream fictício será retornado).
O nome de arquivo fornecido deve ser relativo à raiz da árvore de origem. Por exemplo, o gerador de C++, ao gerar o código para "foo/bar.proto", gerará os arquivos "foo/bar.pb.h" e "foo/bar.pb.cc". Observe que "foo/" está incluído nesses nomes de arquivo. O nome do arquivo não pode conter componentes "." ou "..".
virtual io::ZeroCopyOutputStream *
GeneratorContext::OpenForInsert(
const std::string & filename,
const std::string & insertion_point)
GeneratorContext::OpenForInsert(
const std::string & filename,
const std::string & insertion_point)
Cria um ZeroCopyOutputStream que insere o código no arquivo especificado no ponto de inserção especificado.
Consulte plugin.proto (plugin.pb.h) para mais informações sobre pontos de inserção. A implementação padrão "assert-fail" falha e existe apenas para compatibilidade com versões anteriores.
AVISO: esse recurso está em fase experimental e está sujeito a mudanças.
virtual io::ZeroCopyOutputStream *
GeneratorContext::OpenForInsertWithGeneratedCodeInfo(
const std::string & filename,
const std::string & insertion_point,
const google::protobuf::GeneratedCodeInfo & info)
GeneratorContext::OpenForInsertWithGeneratedCodeInfo(
const std::string & filename,
const std::string & insertion_point,
const google::protobuf::GeneratedCodeInfo & info)
Semelhante a OpenForInsert, mas se info
não estiver vazio, abrirá (ou criará) nomedoarquivo.pb.meta e inserirá informações no lugar apropriado com os deslocamentos necessários.
A implementação padrão ignora info
.
AVISO: este recurso será REMOVIDO em breve.
virtual void GeneratorContext::ListParsedFiles(
std::vector< const FileDescriptor * > * output)
std::vector< const FileDescriptor * > * output)
Retorna um vetor de FileDescriptors para todos os arquivos que estão sendo compilados nessa execução.
Útil para linguagens, como o Go, que tratam os arquivos de maneira diferente quando compiladas como um conjunto em vez de individualmente.