learning_go/pkg/mod/github.com/dixonwille/wmenu@v4.0.2+incompatible/example/main.go
a.pivkin 59666d0dd6 wer
2025-09-06 13:02:52 +03:00

77 lines
1.7 KiB
Go

//package main is to show how multiple menus can be used with eachother
package main
import (
"errors"
"fmt"
"os"
"github.com/dixonwille/wmenu"
)
type menuItem int
const (
pizza menuItem = iota
iceCream
tacos
)
var menuItemStrings = map[menuItem]string{
pizza: "Pizza",
iceCream: "Ice Cream",
tacos: "Tacos",
}
func main() {
mm := mainMenu()
err := mm.Run()
if err != nil {
fmt.Println(err)
os.Exit(1)
}
}
func mainMenu() *wmenu.Menu {
menu := wmenu.NewMenu("What is your favorite food?")
menu.Option(menuItemStrings[pizza], pizza, true, nil)
menu.Option(menuItemStrings[iceCream], iceCream, false, nil)
menu.Option(menuItemStrings[tacos], tacos, false, func(opt wmenu.Opt) error {
fmt.Printf("Tacos are great!\n")
return nil
})
menu.Action(func(opts []wmenu.Opt) error {
if len(opts) != 1 {
return errors.New("wrong number of options chosen")
}
tm := toppingsMenu(opts[0].Value.(menuItem))
return tm.Run()
})
return menu
}
func toppingsMenu(favorite menuItem) *wmenu.Menu {
menu := wmenu.NewMenu(fmt.Sprintf("What is your favorite topping for %s?", menuItemStrings[favorite]))
if favorite == pizza {
menu.Option("Meat", nil, true, nil)
menu.Option("Cheese", nil, false, nil)
menu.Option("Vegitables", nil, false, nil)
}
if favorite == iceCream {
menu.Option("Fruit", nil, true, nil)
menu.Option("Chocolate Syrup", nil, false, nil)
menu.Option("Caramel Syrup", nil, false, nil)
}
menu.Action(func(opts []wmenu.Opt) error {
if len(opts) != 1 {
return errors.New("wrong number of options chosen")
}
fmt.Printf("Your favorite food is %s with %s on top.\n", menuItemStrings[favorite], opts[0].Text)
return nil
})
return menu
}