| /* |
| Menu feed example used in |
| https://developers.google.com/maps-booking/verticals/dining/guides/tutorials/tutorial-menu-feed-protos#go. |
| * |
| */ |
| package main |
| |
| import ( |
| pb "feed/app/generated/food/menu/v1/proto" |
| "fmt" |
| |
| localized_text "google.golang.org/genproto/googleapis/type/localized_text" |
| money "google.golang.org/genproto/googleapis/type/money" |
| "google.golang.org/protobuf/encoding/protojson" |
| timestamppb "google.golang.org/protobuf/types/known/timestamppb" |
| ) |
| |
| func main() { |
| |
| //create a menu component |
| menu := &pb.Menu{ |
| MenuId: "menu1", |
| MerchantIds: []string{"dining-1"}, |
| DisplayName: &pb.TextField{ |
| Text: []*localized_text.LocalizedText{{ |
| Text: "Menu", |
| LanguageCode: "en-us", |
| }}, |
| }, |
| Language: "en-us", |
| LastMerchantUpdateTime: ×tamppb.Timestamp{ |
| Seconds: 1633621547, |
| }, |
| } |
| |
| //create a menu section component |
| section := &pb.MenuSection{ |
| MenuSectionId: "appetizers", |
| DisplayName: &pb.TextField{ |
| Text: []*localized_text.LocalizedText{{ |
| Text: "Lunch Appetizers", |
| LanguageCode: "en-us", |
| }}, |
| }, |
| MenuItemIds: []string{"breadsticks-sauce"}, |
| } |
| |
| //create a menu item component |
| item := &pb.MenuItem{ |
| MenuItemId: "breadsticks-sauce", |
| DisplayName: &pb.TextField{ |
| Text: []*localized_text.LocalizedText{{ |
| Text: "Breadsticks & Sauce", |
| LanguageCode: "en-us", |
| }}, |
| }, |
| Description: &pb.TextField{ |
| Text: []*localized_text.LocalizedText{{ |
| Text: "Breakfast basket w/ side of tomato sauce (size 6 or 12)", |
| LanguageCode: "en-us", |
| }}, |
| }, |
| Pricing: &pb.MenuItem_MenuItemOptionSet_{ |
| MenuItemOptionSet: &pb.MenuItem_MenuItemOptionSet{ |
| MenuItemOptionIds: []string{"breadstick-sm", "breadstick-lg"}, |
| }, |
| }, |
| } |
| imageUris := []string{ |
| "http://www.example.com/photos/breadsticks.jpg", |
| "http://www.example.com/photos/sauce.jpg", |
| } |
| for _, uri := range imageUris { |
| image := &pb.Image{ |
| Uri: uri, |
| } |
| item.Images = append(item.Images, image) |
| } |
| |
| //create a menu item option |
| option := &pb.MenuItemOption{ |
| MenuItemOptionId: "breadstick-sm", |
| Value: &pb.MenuItemOptionProperty{ |
| PropertyType: pb.MenuItemOptionProperty_SIZE, |
| Value: &pb.MenuItemOptionProperty_TextVal{ |
| TextVal: &pb.TextField{ |
| Text: []*localized_text.LocalizedText{{ |
| Text: "Small", |
| LanguageCode: "en-us", |
| }}, |
| }, |
| }, |
| }, |
| OfferSet: &pb.OfferSet{ |
| Offers: []*pb.Offer{{ |
| Price: &money.Money{ |
| CurrencyCode: "USD", |
| Units: 8, |
| Nanos: 0, |
| }, |
| }}, |
| }, |
| } |
| |
| //create feed |
| feed := &pb.FoodMenuFeed{ |
| Data: []*pb.MenuComponent{{ |
| Type: &pb.MenuComponent_Menu{ |
| Menu: menu, |
| }, |
| }, |
| { |
| Type: &pb.MenuComponent_Section{ |
| Section: section, |
| }, |
| }, |
| { |
| Type: &pb.MenuComponent_Item{ |
| Item: item, |
| }, |
| }, |
| { |
| Type: &pb.MenuComponent_Option{ |
| Option: option, |
| }, |
| }}, |
| } |
| |
| marshalOptions := protojson.MarshalOptions{ |
| UseProtoNames: true, |
| } |
| jsonBytes, _ := marshalOptions.Marshal(feed) |
| fmt.Printf("message = %s", string(jsonBytes)) |
| } |
| |