package logic import ( "database/sql" "io" "os" "os/exec" "sevenkeys/database" "strings" ) type Triadic int const ( True Triadic = iota False Either ) type SearchCriteria struct { SetCode string CollectorNumber string Promo Triadic Language string } type CardPrintingSearchOptions map[string]string type StorageSearchOptions map[string]int func GetAllStorageSearchOptions(db *sql.DB) (StorageSearchOptions, error) { var searchOptions StorageSearchOptions = make(StorageSearchOptions) storedCards, err := database.GetAllStoredCards(db) if err != nil { return searchOptions, nil } for _, storedCard := range storedCards { searchString := GetLocationDescription(storedCard) searchOptions[searchString] = storedCard.CardLocationId } return searchOptions, nil } func GenericSearch[pk string | int](options map[string]pk) (pk, string, error) { var value pk cmd := exec.Command("fzf") cmd.Stderr = os.Stderr fzfStdin, err := cmd.StdinPipe() if err != nil { return value, "", err } go func() { defer fzfStdin.Close() for option, _ := range options { io.WriteString(fzfStdin, option+"\n") } }() fzfOutput, err := cmd.Output() if err != nil { return value, "", err } searchResult := strings.TrimSuffix(string(fzfOutput), "\n") value = options[searchResult] return value, searchResult, nil }