package ginutils

import (
	"reflect"

	"github.com/gin-gonic/gin"
)

func PartialMerge(dest interface{}, src interface{}, inputMaps gin.H) {
	for i := 0; i < reflect.ValueOf(src).Elem().NumField(); i++ {
		field := reflect.ValueOf(src).Elem().Type().Field(i)
		fieldName := field.Name
		jsonKeyName := field.Tag.Get("json")
		if jsonKeyName == "" {
			continue
		}
		_, exists := inputMaps[jsonKeyName]
		if !exists {
			continue
		}
		srcField := reflect.ValueOf(src).Elem().FieldByName(fieldName)
		destField := reflect.ValueOf(dest).Elem().FieldByName(fieldName)
		destField.Set(srcField)
	}
}
