lookup.go (1076B)
1 package main 2 3 import ( 4 "database/sql" 5 "errors" 6 "fmt" 7 "strings" 8 9 tea "github.com/charmbracelet/bubbletea" 10 ) 11 12 func lookupWord(db *sql.DB, word string) tea.Cmd { 13 return func() tea.Msg { 14 word = strings.TrimSpace(word) // remove leading / trailing whitespace 15 // Replace apostrophes (possible if copy-pasting) with single quotes 16 word = strings.ReplaceAll(word, `’`, `'`) 17 18 rows, err := db.Query(`select definition from words where word = ?`, word) 19 if err != nil { 20 if errors.Is(err, sql.ErrNoRows) { 21 return definitionMsg("") 22 } 23 return errMsg(fmt.Errorf("looking up '%s': %s", word, err)) 24 } 25 defer rows.Close() 26 var combinedDefinition []string 27 for rows.Next() { 28 var definition string 29 err = rows.Scan(&definition) 30 if err != nil { 31 return errMsg(fmt.Errorf("looking up '%s': %s", word, err)) 32 } 33 combinedDefinition = append(combinedDefinition, definition) 34 } 35 if err := rows.Err(); err != nil { 36 return errMsg(fmt.Errorf("looking up '%s': %s", word, err)) 37 } 38 39 return definitionMsg(strings.Join(combinedDefinition, "\n\n")) 40 } 41 }