clone
#function clone($src, $options)
#if ($vs.util.isString($options))
#set($options = $vs.util.fromJson($options))
#end
#if ($vs.util.isMap($src))
#set($result = $vs.util.newMap())
#if ($vs.util.isMap($options))
#foreach ($key in $vs.util.getMapKeys($options))
$result.put($options.get($key), $src.get(key))
#end
#end
#if ($vs.util.isList($options))
#foreach ($key in $options)
$result.put($key, $src.get(key))
#end
#end
return $result
#end
#if ($vs.util.isList($src))
#set($result = $vs.util.newList())
#foreach ($item in $src)
$result.add(@clone($item, $options))
#end
#end
#end
simpleClone
#function simpleClone($src, $option)
#if ($vs.util.isString($option))
#set($option = $vs.util.fromJson($option))
#end
#if ($vs.util.isMap($src))
#set($result = $vs.util.newMap())
#foreach ($key in $vs.util.getMapKeys($option))
#set($srcItem = $src.get($key))
#set($optionItem = $option.get($key))
#if($vs.util.isMap($optionItem))
$result.put($key, @simpleClone($srcItem, $optionItem))
#else
$result.put($optionItem, $srcItem)
#end
#end
return $result
#end
#if ($vs.util.isList($src))
#set($result = $vs.util.newList())
#foreach ($item in $src)
$result.add(@simpleClone($item, $option))
#end
return $result
#end
#end
copy
#function copy($src, $target, $option)
#if ($vs.util.isString($option))
#set($option = $vs.util.fromJson($option))
#end
#if ($vs.util.isMap($src))
#if ($vs.util.isNull($target))
#set($target = $vs.util.newMap())
#end
#if ($vs.util.isMap($option))
#foreach ($key in $vs.util.getMapKeys($option))
$target.put($option.get($key), $src.get(key))
#end
#end
#if ($vs.util.isList($option))
#foreach ($key in $option)
$target.put($key, $src.get(key))
#end
#end
return $target
#end
#if ($vs.util.isList($src))
#if ($vs.util.isNull($target))
#set($target = $vs.util.newList())
#end
#foreach ($item in $src)
$target.add(@clone($item, $option))
#end
#end
#end