func stringify(v reflect.Value) (string, error) {
	if !v.IsValid() {
		return "", errors.New("encountered a null pointer")
	}
	if !v.CanInterface() {
		return "", errors.New("encountered an unexported struct field")
	}
	stringerValue, ok := v.Interface().(fmt.Stringer)
	if ok {
		return stringerValue.String(), nil
	}
	return "", fmt.Errorf("failed to represent value '%v' as a string because it does not have a 'String()' method", v)
}
stringify returns a string representation of a reflect.Value object.
package protohash
import (
	"errors"
	"fmt"
	"reflect"
)