Index: third_party/protobuf/examples/list_people.go |
diff --git a/third_party/protobuf/examples/list_people.go b/third_party/protobuf/examples/list_people.go |
new file mode 100644 |
index 0000000000000000000000000000000000000000..70bc589efc5cebd1d5dbc5b53f0e14e551b81725 |
--- /dev/null |
+++ b/third_party/protobuf/examples/list_people.go |
@@ -0,0 +1,61 @@ |
+package main |
+ |
+import ( |
+ "fmt" |
+ "io" |
+ "io/ioutil" |
+ "log" |
+ "os" |
+ |
+ "github.com/golang/protobuf/proto" |
+ pb "github.com/google/protobuf/examples/tutorial" |
+) |
+ |
+func writePerson(w io.Writer, p *pb.Person) { |
+ fmt.Fprintln(w, "Person ID:", p.Id) |
+ fmt.Fprintln(w, " Name:", p.Name) |
+ if p.Email != "" { |
+ fmt.Fprintln(w, " E-mail address:", p.Email) |
+ } |
+ |
+ for _, pn := range p.Phones { |
+ switch pn.Type { |
+ case pb.Person_MOBILE: |
+ fmt.Fprint(w, " Mobile phone #: ") |
+ case pb.Person_HOME: |
+ fmt.Fprint(w, " Home phone #: ") |
+ case pb.Person_WORK: |
+ fmt.Fprint(w, " Work phone #: ") |
+ } |
+ fmt.Fprintln(w, pn.Number) |
+ } |
+} |
+ |
+func listPeople(w io.Writer, book *pb.AddressBook) { |
+ for _, p := range book.People { |
+ writePerson(w, p) |
+ } |
+} |
+ |
+// Main reads the entire address book from a file and prints all the |
+// information inside. |
+func main() { |
+ if len(os.Args) != 2 { |
+ log.Fatalf("Usage: %s ADDRESS_BOOK_FILE\n", os.Args[0]) |
+ } |
+ fname := os.Args[1] |
+ |
+ // [START unmarshal_proto] |
+ // Read the existing address book. |
+ in, err := ioutil.ReadFile(fname) |
+ if err != nil { |
+ log.Fatalln("Error reading file:", err) |
+ } |
+ book := &pb.AddressBook{} |
+ if err := proto.Unmarshal(in, book); err != nil { |
+ log.Fatalln("Failed to parse address book:", err) |
+ } |
+ // [END unmarshal_proto] |
+ |
+ listPeople(os.Stdout, book) |
+} |