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 }