package utils

import (
	"bytes"
	"fmt"
	"reflect"
)

func ToString(arg any) string {
	buf := bytes.NewBufferString("")
	_, err := fmt.Fprint(buf, arg)
	if err != nil {
		fmt.Errorf("ToString err %s %+v", arg, err)
		return ""
	}
	return buf.String()
}

func ToStringCompatiblePtr(arg any) string {
	if arg == nil {
		return ""
	}

	if reflect.TypeOf(arg).Kind() != reflect.Ptr {
		return ToString(arg)
	}

	return ToStringCompatiblePtr(reflect.Indirect(reflect.ValueOf(arg)))
}