package repl

import (
	"fmt"
	"io"
	"reflect"
)

func AddTypePrinter[T any](r *REPL, p func(w io.Writer, t T, concise bool) error) {
	var t T

	tt := reflect.TypeOf(t)
	r.typePrinters[tt] = func(w io.Writer, v any, concise bool) error {
		vt, ok := v.(T)
		if !ok {
			return fmt.Errorf("cannot convert %v to T", v)
		}
		return p(w, vt, concise)
	}
}