syntax = "proto3"; package tutorial;
import "google/protobuf/timestamp.proto";
syntax = "proto3";
package tutorial;
import "google/protobuf/timestamp.proto";
message Person {
string name = 1;
int32 id = 2; // Unique ID number for this person.
string email = 3;
enum PhoneType {
MOBILE = 0;
HOME = 1;
WORK = 2;
}
message PhoneNumber {
string number = 1;
PhoneType type = 2;
}
repeated PhoneNumber phones = 4;
google.protobuf.Timestamp last_updated = 5;
}
// Our address book file is just one of these.
message AddressBook {
repeated Person people = 1;
}
apt-get install libprotobuf-dev
apt-get install protobuf-compiler
apt-get install build-essential
tar xvfz protobuf-2.6.0.tar.gzcd protobuf-2.6.0 .
/configure && make install
npm install google-protobuf
protoc -I=. --js_out=import_style=commonjs,binary:build ./addressbook.proto
var pb = require('./build/addressbook_pb');
var phone_book = new pb.AddressBook()
// Person 1
var person1 = new pb.Person()
person1.setId(1001)
person1.setName("John Doe")
person1.setEmail("jdoe@example.com")
var phone_number1 = new pb.Person.PhoneNumber();
phone_number1.setNumber("12345-67890")
phone_number1.setType(pb.Person.PhoneType.WORK)
person1.setPhonesList([phone_number1])
// Person 2
var person2 = new pb.Person()
person2.setId(1002)
person2.setName("Alex")
person2.setEmail("alex@example.com")
var phone_number2 = new pb.Person.PhoneNumber();
phone_number2.setNumber("100122-5889")
phone_number2.setType(pb.Person.PhoneType.WORK)
person2.setPhonesList([phone_number2])
// add persons to the phonebook
phone_book.setPeopleList([person1, person2])
// let's stringity our Address object so binary array
// that we can use it transfer the data across services
data = phone_book.serializeBinary()
// printing out our raw protobuf object
console.log("Raw data: ", data)
// let's go the other way and parse our raw protobuf binary array
// we can modify and use
var address_book = pb.AddressBook.deserializeBinary(data)
var person_list = address_book.getPeopleList()
for (var i=0; i < person_list.length ; i++) {
var person = person_list[i]
var phones = person.getPhonesList()
console.log("===========================")
console.log("Person ID:", person.getId())
console.log("Name:", person.getName())
console.log("E-mail:", person.getEmail())
for (var k=0; k < phones.length; k++) {
var phone = phones[k]
console.log("Phone:", phone.getType() == 2 ? "WORK" : "", phone.getNumber())
}
}
node index.js
Raw data: Uint8Array [
10, 48, 10, 8, 74, 111, 104, 110, 32, 68, 111, 101,
16, 233, 7, 26, 16, 106, 100, 111, 101, 64, 101, 120,
97, 109, 112, 108, 101, 46, 99, 111, 109, 34, 15, 10,
11, 49, 50, 51, 52, 53, 45, 54, 55, 56, 57, 48,
16, 2, 10, 44, 10, 4, 65, 108, 101, 120, 16, 234,
7, 26, 16, 97, 108, 101, 120, 64, 101, 120, 97, 109,
112, 108, 101, 46, 99, 111, 109, 34, 15, 10, 11, 49,
48, 48, 49, 50, 50, 45, 53, 56, 56, 57, 16, 2
]
===========================
Person ID: 1001
Name: John Doe
E-mail: jdoe@example.com
Phone: WORK 12345-67890
===========================
Person ID: 1002
Name: Alex
E-mail: alex@example.com
Phone: WORK 100122-5889
Final code for this tutorial can be found here: https://github.com/gufranmirza/javascript-pb
Write your response...