1 // See README.md for information and build instructions.
5 #include <google/protobuf/util/time_util.h>
9 #include "addressbook.pb.h"
13 using google::protobuf::util::TimeUtil
;
15 // This function fills in a Person message based on user input.
16 void PromptForAddress(tutorial::Person
* person
) {
17 cout
<< "Enter person ID number: ";
21 cin
.ignore(256, '\n');
23 cout
<< "Enter name: ";
24 getline(cin
, *person
->mutable_name());
26 cout
<< "Enter email address (blank for none): ";
30 person
->set_email(email
);
34 cout
<< "Enter a phone number (or leave blank to finish): ";
41 tutorial::Person::PhoneNumber
* phone_number
= person
->add_phones();
42 phone_number
->set_number(number
);
44 cout
<< "Is this a mobile, home, or work phone? ";
47 if (type
== "mobile") {
48 phone_number
->set_type(tutorial::Person::MOBILE
);
49 } else if (type
== "home") {
50 phone_number
->set_type(tutorial::Person::HOME
);
51 } else if (type
== "work") {
52 phone_number
->set_type(tutorial::Person::WORK
);
54 cout
<< "Unknown phone type. Using default." << endl
;
57 *person
->mutable_last_updated() = TimeUtil::SecondsToTimestamp(time(NULL
));
60 // Main function: Reads the entire address book from a file,
61 // adds one person based on user input, then writes it back out to the same
63 int main(int argc
, char* argv
[]) {
64 // Verify that the version of the library that we linked against is
65 // compatible with the version of the headers we compiled against.
66 GOOGLE_PROTOBUF_VERIFY_VERSION
;
69 cerr
<< "Usage: " << argv
[0] << " ADDRESS_BOOK_FILE" << endl
;
73 tutorial::AddressBook address_book
;
76 // Read the existing address book.
77 fstream
input(argv
[1], ios::in
| ios::binary
);
79 cout
<< argv
[1] << ": File not found. Creating a new file." << endl
;
80 } else if (!address_book
.ParseFromIstream(&input
)) {
81 cerr
<< "Failed to parse address book." << endl
;
87 PromptForAddress(address_book
.add_people());
90 // Write the new address book back to disk.
91 fstream
output(argv
[1], ios::out
| ios::trunc
| ios::binary
);
92 if (!address_book
.SerializeToOstream(&output
)) {
93 cerr
<< "Failed to write address book." << endl
;
98 // Optional: Delete all global objects allocated by libprotobuf.
99 google::protobuf::ShutdownProtobufLibrary();