util.go 805 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. package util
  2. import (
  3. "time"
  4. tea "github.com/charmbracelet/bubbletea"
  5. )
  6. func CmdHandler(msg tea.Msg) tea.Cmd {
  7. return func() tea.Msg {
  8. return msg
  9. }
  10. }
  11. func ReportError(err error) tea.Cmd {
  12. return CmdHandler(InfoMsg{
  13. Type: InfoTypeError,
  14. Msg: err.Error(),
  15. })
  16. }
  17. type InfoType int
  18. const (
  19. InfoTypeInfo InfoType = iota
  20. InfoTypeWarn
  21. InfoTypeError
  22. )
  23. func ReportInfo(info string) tea.Cmd {
  24. return CmdHandler(InfoMsg{
  25. Type: InfoTypeInfo,
  26. Msg: info,
  27. })
  28. }
  29. func ReportWarn(warn string) tea.Cmd {
  30. return CmdHandler(InfoMsg{
  31. Type: InfoTypeWarn,
  32. Msg: warn,
  33. })
  34. }
  35. type (
  36. InfoMsg struct {
  37. Type InfoType
  38. Msg string
  39. TTL time.Duration
  40. }
  41. ClearStatusMsg struct{}
  42. )
  43. func Clamp(v, low, high int) int {
  44. if high < low {
  45. low, high = high, low
  46. }
  47. return min(high, max(low, v))
  48. }