background code checker for golang
at main 1.6 kB view raw
1package gust 2 3import ( 4 "fmt" 5 6 "github.com/charmbracelet/bubbles/spinner" 7 tea "github.com/charmbracelet/bubbletea" 8) 9 10type Status struct { 11 Kind StatusKind 12 Spinner spinner.Model 13} 14 15func NewStatus() Status { 16 return Status{ 17 Kind: Initializing, 18 Spinner: spinner.New(spinner.WithSpinner(spinner.Line)), 19 } 20} 21 22type StatusKind int 23 24const ( 25 Initializing StatusKind = iota 26 Success 27 Running 28 Error 29) 30 31func (s StatusKind) String() string { 32 switch s { 33 case Initializing: 34 return "initializing" 35 case Success: 36 return "success" 37 case Running: 38 return "running" 39 case Error: 40 return "error" 41 default: 42 return "error" 43 } 44} 45 46func (s StatusKind) Cmd() tea.Cmd { 47 return func() tea.Msg { 48 return s 49 } 50} 51 52func (s StatusKind) Style() spinner.Spinner { 53 switch s { 54 case Initializing: 55 return spinner.Dot 56 case Success: 57 return spinner.Jump 58 default: 59 return spinner.Dot 60 } 61} 62 63func (s Status) Init() tea.Cmd { 64 return tea.Batch(Initializing.Cmd(), s.Spinner.Tick) 65} 66 67func (s Status) Update(msg tea.Msg) (Status, tea.Cmd) { 68 switch msg := msg.(type) { 69 case StatusKind: 70 s.Kind = msg 71 s.Spinner.Spinner = s.Kind.Style() 72 return s, nil 73 case spinner.TickMsg: 74 var cmd tea.Cmd 75 s.Spinner, cmd = s.Spinner.Update(msg) 76 return s, cmd 77 } 78 79 return s, nil 80} 81 82func (s Status) View() string { 83 switch s.Kind { 84 case Initializing: 85 return fmt.Sprintf("initializing %s", s.Spinner.View()) 86 case Success: 87 return fmt.Sprintf("success") 88 case Running: 89 return fmt.Sprintf("running %s", s.Spinner.View()) 90 case Error: 91 return "error" 92 default: 93 return "error" 94 } 95}