package main import ( "database/sql" "errors" "fmt" "strings" tea "github.com/charmbracelet/bubbletea" ) func lookupWord(db *sql.DB, word string) tea.Cmd { return func() tea.Msg { word = strings.TrimSpace(word) // remove leading / trailing whitespace // Replace apostrophes (possible if copy-pasting) with single quotes word = strings.ReplaceAll(word, `’`, `'`) rows, err := db.Query(`select definition from words where word = ?`, word) if err != nil { if errors.Is(err, sql.ErrNoRows) { return definitionMsg("") } return errMsg(fmt.Errorf("looking up '%s': %s", word, err)) } defer rows.Close() var combinedDefinition []string for rows.Next() { var definition string err = rows.Scan(&definition) if err != nil { return errMsg(fmt.Errorf("looking up '%s': %s", word, err)) } combinedDefinition = append(combinedDefinition, definition) } if err := rows.Err(); err != nil { return errMsg(fmt.Errorf("looking up '%s': %s", word, err)) } return definitionMsg(strings.Join(combinedDefinition, "\n\n")) } }