|  | @@ -2,6 +2,7 @@ package rest
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  import (
 | 
	
		
			
				|  |  |  	"fmt"
 | 
	
		
			
				|  |  | +	"log"
 | 
	
		
			
				|  |  |  	"reflect"
 | 
	
		
			
				|  |  |  	"strings"
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -35,6 +36,7 @@ func parseVal(from, to reflect.Value, fieldName string) IErrorArgs {
 | 
	
		
			
				|  |  |  func parseType(from, to reflect.Value, fieldName string) IErrorArgs {
 | 
	
		
			
				|  |  |  	from = realValue(from)
 | 
	
		
			
				|  |  |  	to = realValue(to)
 | 
	
		
			
				|  |  | +	log.Println("=== to", to.Kind(), to.Type().Name())
 | 
	
		
			
				|  |  |  	switch to.Kind() {
 | 
	
		
			
				|  |  |  	case reflect.Interface:
 | 
	
		
			
				|  |  |  		if from.Kind() != reflect.Invalid {
 | 
	
	
		
			
				|  | @@ -97,6 +99,7 @@ func parseStruct(from, to reflect.Value, fieldName string) IErrorArgs {
 | 
	
		
			
				|  |  |  			return f.RestFrom(from.Interface())
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  | +loop:
 | 
	
		
			
				|  |  |  	for i := 0; i < to.NumField(); i++ {
 | 
	
		
			
				|  |  |  		required := false
 | 
	
		
			
				|  |  |  		// устанавливаем тип и указатель поля объекта, куда копируем
 | 
	
	
		
			
				|  | @@ -104,6 +107,18 @@ func parseStruct(from, to reflect.Value, fieldName string) IErrorArgs {
 | 
	
		
			
				|  |  |  		fVal := to.Field(i)
 | 
	
		
			
				|  |  |  		// проверяем тег, если он есть
 | 
	
		
			
				|  |  |  		tag := fType.Tag.Get("rest")
 | 
	
		
			
				|  |  | +		if fType.Type.Kind() == reflect.Ptr {
 | 
	
		
			
				|  |  | +			elem := fType.Type.Elem()
 | 
	
		
			
				|  |  | +			if elem.Kind() == reflect.Struct {
 | 
	
		
			
				|  |  | +				if fVal.IsNil() {
 | 
	
		
			
				|  |  | +					fVal.Set(reflect.New(elem))
 | 
	
		
			
				|  |  | +					if ierr := parseStruct(from, fVal.Elem(), prefixFieldName(fieldName, fType.Name)); ierr != nil {
 | 
	
		
			
				|  |  | +						return ierr
 | 
	
		
			
				|  |  | +					}
 | 
	
		
			
				|  |  | +					continue loop
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  |  		if len(tag) > 0 {
 | 
	
		
			
				|  |  |  			required = strings.Contains(tag, "required")
 | 
	
		
			
				|  |  |  		}
 |