Protocol Buffers - Google's data interchange format (grpc依赖)
https://developers.google.com/protocol-buffers/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
78 lines
1.8 KiB
78 lines
1.8 KiB
2 years ago
|
#! /usr/bin/env ruby
|
||
|
|
||
|
# See README.md for information and build instructions.
|
||
|
|
||
|
require './addressbook_pb'
|
||
|
require 'pry'
|
||
|
|
||
|
# creates Person object and fills it with data from user input
|
||
|
def prompt_for_address()
|
||
|
person = Tutorial::Person.newlD()
|
||
|
|
||
|
puts "Enter person ID number:"
|
||
|
person.id = STDIN.gets.chomp.to_i
|
||
|
puts "Enter name:"
|
||
|
person.name = STDIN.gets.chomp
|
||
|
|
||
|
puts "Enter email address (blank for none):"
|
||
|
email = STDIN.gets.chomp
|
||
|
|
||
|
if email != ""
|
||
|
person.email = email
|
||
|
end
|
||
|
|
||
|
loop do
|
||
|
puts "Enter a phone number (or leave blank to finish):"
|
||
|
number = STDIN.gets.chomp
|
||
|
|
||
|
if number == ""
|
||
|
break
|
||
|
end
|
||
|
|
||
|
phone_number = Tutorial::Person::PhoneNumber.new(number: number)
|
||
|
puts "Is this a mobile, home or work phone?"
|
||
|
type = STDIN.gets.chomp
|
||
|
|
||
|
case type
|
||
|
when "mobile"
|
||
|
phone_number.type = :MOBILE
|
||
|
when "home"
|
||
|
phone_number.type = :HOME
|
||
|
when "work"
|
||
|
phone_number.type = :WORK
|
||
|
else
|
||
|
puts "Unknown phone type; leaving as default value."
|
||
|
end
|
||
|
person.phones.push(phone_number)
|
||
|
end
|
||
|
person
|
||
|
end
|
||
|
|
||
|
# Main procedure: Reads the entire address book from a file,
|
||
|
# adds one person based on user input, then writes it back out to the same
|
||
|
# file.
|
||
|
if ARGV.length != 1
|
||
|
puts "Usage: #{$0} ADDRESS_BOOK_FILE"
|
||
|
exit(-1)
|
||
|
end
|
||
|
|
||
|
address_book = Tutorial::AddressBook.new()
|
||
|
if File.exist?(ARGV[0])
|
||
|
# Read the existing address book if it exists
|
||
|
f = File.open(ARGV[0], "rb")
|
||
|
address_book = Tutorial::AddressBook.decode(f.read)
|
||
|
f.close
|
||
|
else
|
||
|
puts "#{$PROGRAM_NAME}: File not found. Creating new file."
|
||
|
end
|
||
|
|
||
|
person = prompt_for_address
|
||
|
|
||
|
# Add an address.
|
||
|
address_book.people.push(person)
|
||
|
|
||
|
# Write the new address book back to disk.
|
||
|
f = File.open(ARGV[0], "wb")
|
||
|
f.write(Tutorial::AddressBook.encode(address_book))
|
||
|
f.close
|