abstract terminal interface

This commit is contained in:
alu
2026-08-07 14:49:21 -07:00
parent 691dba7687
commit 5c4d16857b
10 changed files with 91 additions and 40 deletions
+50
View File
@@ -0,0 +1,50 @@
package common
import (
"fmt"
"strings"
)
type Terminal interface {
Start() error
Header(string) error
Subheader(string) error
Print(string) error
End() error
}
type StringBuilderTerminal struct {
sb *strings.Builder
}
func NewTerminal() Terminal {
return &StringBuilderTerminal{
sb: &strings.Builder{},
}
}
func (t *StringBuilderTerminal) Start() error {
_, err := fmt.Fprint(t.sb, "\033[H")
return err
}
func (t *StringBuilderTerminal) Header(header string) error {
_, err := fmt.Fprintf(t.sb, "=== %s ===\033[K\n", header)
return err
}
func (t *StringBuilderTerminal) Subheader(subheader string) error {
_, err := fmt.Fprintf(t.sb, "--- %s ---\033[K\n", subheader)
return err
}
func (t *StringBuilderTerminal) Print(line string) error {
_, err := fmt.Fprintf(t.sb, "%s\033[K\n", line)
return err
}
func (t *StringBuilderTerminal) End() error {
fmt.Fprint(t.sb, "\033[0J")
_, err := fmt.Print(t.sb.String())
return err
}