package mapstructure

import "time"

// DecodeWithTime 支持时间转字符串
// 支持
// 1. *Time.time 转 string/*string
// 2. *Time.time 转 uint/uint32/uint64/int/int32/int64，支持带指针
// 不能用 Time.time 转，它会在上层认为是一个结构体数据而直接转成map，再到hook方法
func DecodeWithTime(input, output interface{}, layout string) error {
	if layout == "" {
		layout = time.DateTime
	}
	config := &DecoderConfig{
		Metadata:   nil,
		Result:     output,
		DecodeHook: ComposeDecodeHookFunc(TimeToStringHook(layout), TimeToUnixIntHook()),
	}

	decoder, err := NewDecoder(config)
	if err != nil {
		return err
	}

	return decoder.Decode(input)
}
