Criando mensagens


link: https://developers.google.com/protocol-buffers/docs/proto3

Exemplo

message SearchRequest {
  string query = 1;
  int32 page_number = 2;  // Which page number do we want?
  int32 result_per_page = 3;  // Number of results to return per page.
}
  • os numero servem para definir a ordem dos dado na serialização para binario
  • Caso remova um campo, e recomendado não usar o numero que ele pertecia, pois isso pode dar conflito no futuro, para garantir que isso o mesmo não seja usado vc pode marcalos como reserved (reservados / excluidos)
message Foo {
  reserved 2, 15, 9 to 11;
  reserved "foo", "bar";
}

Enums

message SearchRequest {
  string query = 1;
  int32 page_number = 2;
  int32 result_per_page = 3;
  enum Corpus {
    UNIVERSAL = 0;
    WEB = 1;
    IMAGES = 2;
    LOCAL = 3;
    NEWS = 4;
    PRODUCTS = 5;
    VIDEO = 6;
  }
  Corpus corpus = 4;
}
// Usando alias para representar a mesma coisa 

message MyMessage1 {
  enum EnumAllowingAlias {
    option allow_alias = true;  // necessario deixar essa opção como true, senão vai dar erro, como abaixo
    UNKNOWN = 0;
    STARTED = 1;
    RUNNING = 1;
  }
}

message MyMessage2 {
  enum EnumNotAllowingAlias {
    UNKNOWN = 0;
    STARTED = 1;
    // RUNNING = 1;  // Uncommenting this line will cause a compile error inside Google and a warning message outside.
  }
}

//Observe que você não pode misturar nomes de campo e valores numéricos na mesma reservedinstrução.

Tipos de Mensagem personalizados

message SearchResponse {
  repeated Result results = 1; //o repeat dis que pode ser repetido os itens, semelhate a uma lista
}

message Result {
  string url = 1;
  string title = 2;
  repeated string snippets = 3;
}

// Tipo aninhado

message SearchResponse {
  message Result {
    string url = 1;
    string title = 2;
    repeated string snippets = 3;
  }
  repeated Result results = 1;
}

// chamdando tipo aninhado

message SomeOtherMessage {
  SearchResponse.Result result = 1;
}

// Exemplo de message aninhada

message Outer {                  // Level 0
  message MiddleAA {  // Level 1
    message Inner {   // Level 2
      int64 ival = 1;
      bool  booly = 2;
    }
  }
  message MiddleBB {  // Level 1
    message Inner {   // Level 2
      int32 ival = 1;
      bool  booly = 2;
    }
  }
}

caso a mensagem que queira colocar dentro da mensagem esteja em outro proto, vc pode importa-lo

Importando

import "myproject/other_protos.proto";