Добавлено: несколько аргументов функции и замыкание
This commit is contained in:
@@ -17,42 +17,41 @@ var menu = map[string]func(*account.VaultWithDb){
|
|||||||
"4": deleteAccount,
|
"4": deleteAccount,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var menuVariants = []string{
|
||||||
|
"1. Создать аккаунт",
|
||||||
|
"2. Найти аккаунт по URL",
|
||||||
|
"3. Найти аккаунт по логину",
|
||||||
|
"4. Удалить аккаунт",
|
||||||
|
"5. Выход",
|
||||||
|
"Выберите вариант",
|
||||||
|
}
|
||||||
|
|
||||||
|
func menuCounter() func() {
|
||||||
|
i := 0
|
||||||
|
return func() {
|
||||||
|
i++
|
||||||
|
fmt.Println("Вызов:", i)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
// fmt.Println(output.Sum(100, 42))
|
|
||||||
// fmt.Println(output.Sum(10.7, 3.14))
|
|
||||||
// fmt.Println(output.Sum("Hello ", "world!"))
|
|
||||||
color.Blue("__Менеджер паролей__")
|
color.Blue("__Менеджер паролей__")
|
||||||
vault := account.NewVault(files.NewJsonDb("data.json"))
|
vault := account.NewVault(files.NewJsonDb("data.json"))
|
||||||
|
counter := menuCounter()
|
||||||
Menu:
|
Menu:
|
||||||
for {
|
for {
|
||||||
variant := PromptData([]string{
|
counter()
|
||||||
"1. Создать аккаунт",
|
variant := PromptData(menuVariants...)
|
||||||
"2. Найти аккаунт по URL",
|
|
||||||
"3. Найти аккаунт по логину",
|
|
||||||
"4. Удалить аккаунт",
|
|
||||||
"5. Выход",
|
|
||||||
"Выберите вариант",
|
|
||||||
})
|
|
||||||
menuFunc := menu[variant]
|
menuFunc := menu[variant]
|
||||||
if menuFunc == nil {
|
if menuFunc == nil {
|
||||||
break Menu
|
break Menu
|
||||||
}
|
}
|
||||||
menuFunc(vault)
|
menuFunc(vault)
|
||||||
// switch variant {
|
|
||||||
// case "1":
|
|
||||||
// createAccount(vault)
|
|
||||||
// case "2":
|
|
||||||
// findAccount(vault)
|
|
||||||
// case "3":
|
|
||||||
// deleteAccount(vault)
|
|
||||||
// default:
|
|
||||||
// break Menu
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func findAccountByUrl(vault *account.VaultWithDb) {
|
func findAccountByUrl(vault *account.VaultWithDb) {
|
||||||
url := PromptData([]string{"Введите URL для поиска"})
|
url := PromptData("Введите URL для поиска")
|
||||||
// Анонимная функция как параметр
|
// Анонимная функция как параметр
|
||||||
accounts := vault.FindAccounts(url, func(acc account.Account, str string) bool {
|
accounts := vault.FindAccounts(url, func(acc account.Account, str string) bool {
|
||||||
return strings.Contains(acc.Url, str)
|
return strings.Contains(acc.Url, str)
|
||||||
@@ -61,7 +60,7 @@ func findAccountByUrl(vault *account.VaultWithDb) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func findAccountByLogin(vault *account.VaultWithDb) {
|
func findAccountByLogin(vault *account.VaultWithDb) {
|
||||||
login := PromptData([]string{"Введите Login для поиска"})
|
login := PromptData("Введите Login для поиска")
|
||||||
// Анонимная функция как параметр
|
// Анонимная функция как параметр
|
||||||
accounts := vault.FindAccounts(login, func(acc account.Account, str string) bool {
|
accounts := vault.FindAccounts(login, func(acc account.Account, str string) bool {
|
||||||
return strings.Contains(acc.Login, str)
|
return strings.Contains(acc.Login, str)
|
||||||
@@ -79,7 +78,7 @@ func outputResults(accounts *[]account.Account) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func deleteAccount(vault *account.VaultWithDb) {
|
func deleteAccount(vault *account.VaultWithDb) {
|
||||||
url := PromptData([]string{"Введите URL для поиска: "})
|
url := PromptData("Введите URL для поиска: ")
|
||||||
isDeleted := vault.DeleteAccountByUrl(url)
|
isDeleted := vault.DeleteAccountByUrl(url)
|
||||||
if isDeleted {
|
if isDeleted {
|
||||||
color.Green("Удалено")
|
color.Green("Удалено")
|
||||||
@@ -89,9 +88,9 @@ func deleteAccount(vault *account.VaultWithDb) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func createAccount(vault *account.VaultWithDb) {
|
func createAccount(vault *account.VaultWithDb) {
|
||||||
login := PromptData([]string{"Введите логин: "})
|
login := PromptData("Введите логин: ")
|
||||||
password := PromptData([]string{"Введите пароль: "})
|
password := PromptData("Введите пароль: ")
|
||||||
url := PromptData([]string{"Введите URL: "})
|
url := PromptData("Введите URL: ")
|
||||||
|
|
||||||
myAccount, err := account.NewAccount(login, password, url)
|
myAccount, err := account.NewAccount(login, password, url)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -102,7 +101,7 @@ func createAccount(vault *account.VaultWithDb) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// функция введения данных
|
// функция введения данных
|
||||||
func PromptData[T any](prompt []T) string {
|
func PromptData(prompt ...string) string {
|
||||||
for i, line := range prompt {
|
for i, line := range prompt {
|
||||||
if i == len(prompt)-1 {
|
if i == len(prompt)-1 {
|
||||||
fmt.Printf("%v: ", line)
|
fmt.Printf("%v: ", line)
|
||||||
|
|||||||
Reference in New Issue
Block a user