package main import ( "fmt" "password/account" "password/files" "password/output" "strings" "github.com/fatih/color" ) var menu = map[string]func(*account.VaultWithDb){ "1": createAccount, "2": findAccountByUrl, "3": findAccountByLogin, "4": deleteAccount, } func main() { // fmt.Println(output.Sum(100, 42)) // fmt.Println(output.Sum(10.7, 3.14)) // fmt.Println(output.Sum("Hello ", "world!")) color.Blue("__Менеджер паролей__") vault := account.NewVault(files.NewJsonDb("data.json")) Menu: for { variant := PromptData([]string{ "1. Создать аккаунт", "2. Найти аккаунт по URL", "3. Найти аккаунт по логину", "4. Удалить аккаунт", "5. Выход", "Выберите вариант", }) menuFunc := menu[variant] if menuFunc == nil { break Menu } menuFunc(vault) // switch variant { // case "1": // createAccount(vault) // case "2": // findAccount(vault) // case "3": // deleteAccount(vault) // default: // break Menu // } } } func findAccountByUrl(vault *account.VaultWithDb) { url := PromptData([]string{"Введите URL для поиска"}) // Анонимная функция как параметр accounts := vault.FindAccounts(url, func(acc account.Account, str string) bool { return strings.Contains(acc.Url, str) }) outputResults(&accounts) } func findAccountByLogin(vault *account.VaultWithDb) { login := PromptData([]string{"Введите Login для поиска"}) // Анонимная функция как параметр accounts := vault.FindAccounts(login, func(acc account.Account, str string) bool { return strings.Contains(acc.Login, str) }) outputResults(&accounts) } func outputResults(accounts *[]account.Account) { if len(*accounts) == 0 { color.Red("Аккаунт не найден!") } for _, account := range *accounts { account.Output() } } func deleteAccount(vault *account.VaultWithDb) { url := PromptData([]string{"Введите URL для поиска: "}) isDeleted := vault.DeleteAccountByUrl(url) if isDeleted { color.Green("Удалено") } else { output.PrintError("Не найдено") } } func createAccount(vault *account.VaultWithDb) { login := PromptData([]string{"Введите логин: "}) password := PromptData([]string{"Введите пароль: "}) url := PromptData([]string{"Введите URL: "}) myAccount, err := account.NewAccount(login, password, url) if err != nil { output.PrintError("ОШИБКА: Неверный формат URL или Login") return } vault.AddAccount(*myAccount) } // функция введения данных func PromptData[T any](prompt []T) string { for i, line := range prompt { if i == len(prompt)-1 { fmt.Printf("%v: ", line) } else { fmt.Println(line) } } var res string fmt.Scanln(&res) return res }