OBSERVAÇÃO:este site foi descontinuado. O site será desativado após 31 de janeiro de 2023, e o tráfego será redirecionado para o novo site em https://protobuf.dev. Enquanto isso, as atualizações serão feitas apenas para protobuf.dev.

code_generator.h

#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 arquivo

Essas 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 > > * )

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
}

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

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

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

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)

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)

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)

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.