fix mapping inner structs with correct tag (#1718)
This commit is contained in:
		
				
					committed by
					
						 thinkerou
						thinkerou
					
				
			
			
				
	
			
			
			
						parent
						
							0bfc9cbcdb
						
					
				
				
					commit
					49e4b0c60c
				
			| @ -11,6 +11,7 @@ import ( | |||||||
| 	"io/ioutil" | 	"io/ioutil" | ||||||
| 	"mime/multipart" | 	"mime/multipart" | ||||||
| 	"net/http" | 	"net/http" | ||||||
|  | 	"strconv" | ||||||
| 	"testing" | 	"testing" | ||||||
| 	"time" | 	"time" | ||||||
|  |  | ||||||
| @ -690,6 +691,28 @@ func TestUriBinding(t *testing.T) { | |||||||
| 	assert.Equal(t, map[string]interface{}(nil), not.Name) | 	assert.Equal(t, map[string]interface{}(nil), not.Name) | ||||||
| } | } | ||||||
|  |  | ||||||
|  | func TestUriInnerBinding(t *testing.T) { | ||||||
|  | 	type Tag struct { | ||||||
|  | 		Name string `uri:"name"` | ||||||
|  | 		S    struct { | ||||||
|  | 			Age int `uri:"age"` | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	expectedName := "mike" | ||||||
|  | 	expectedAge := 25 | ||||||
|  |  | ||||||
|  | 	m := map[string][]string{ | ||||||
|  | 		"name": {expectedName}, | ||||||
|  | 		"age":  {strconv.Itoa(expectedAge)}, | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	var tag Tag | ||||||
|  | 	assert.NoError(t, Uri.BindUri(m, &tag)) | ||||||
|  | 	assert.Equal(t, tag.Name, expectedName) | ||||||
|  | 	assert.Equal(t, tag.S.Age, expectedAge) | ||||||
|  | } | ||||||
|  |  | ||||||
| func testFormBinding(t *testing.T, method, path, badPath, body, badBody string) { | func testFormBinding(t *testing.T, method, path, badPath, body, badBody string) { | ||||||
| 	b := Form | 	b := Form | ||||||
| 	assert.Equal(t, "form", b.Name()) | 	assert.Equal(t, "form", b.Name()) | ||||||
|  | |||||||
| @ -55,7 +55,7 @@ func mapFormByTag(ptr interface{}, form map[string][]string, tag string) error { | |||||||
| 				structFieldKind = structField.Kind() | 				structFieldKind = structField.Kind() | ||||||
| 			} | 			} | ||||||
| 			if structFieldKind == reflect.Struct { | 			if structFieldKind == reflect.Struct { | ||||||
| 				err := mapForm(structField.Addr().Interface(), form) | 				err := mapFormByTag(structField.Addr().Interface(), form, tag) | ||||||
| 				if err != nil { | 				if err != nil { | ||||||
| 					return err | 					return err | ||||||
| 				} | 				} | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user