util.go 965 B

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