package wand import ( "code.squareroundforest.org/arpio/notation" "fmt" "io" "reflect" ) func fprintOne(out io.Writer, v any) error { reader, ok := v.(io.Reader) if ok { _, err := io.Copy(out, reader) return err } r := reflect.ValueOf(v) if r.IsValid() { t := r.Type() if t.Implements(reflect.TypeFor[fmt.Stringer]()) { _, err := fmt.Fprintln(out, r.Interface()) return err } if t.Kind() == reflect.Slice { for i := 0; i < r.Len(); i++ { if err := fprintOne(out, r.Index(i).Interface()); err != nil { return err } } return nil } } switch r.Kind() { case reflect.Bool, reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr, reflect.Float32, reflect.Float64, reflect.String: _, err := fmt.Fprintln(out, v) return err default: _, err := notation.Fprintlnwt(out, v) return err } } func printOutput(out io.Writer, o []any) error { for _, oi := range o { if err := fprintOne(out, oi); err != nil { return fmt.Errorf("error displaying output: %w", err) } } return nil }