add test for decoding direct struct
diff --git a/mapstructure.go b/mapstructure.go
index d48ac95..c5e33be 100644
--- a/mapstructure.go
+++ b/mapstructure.go
@@ -554,6 +554,8 @@
 func (d *Decoder) decodeStruct(name string, data interface{}, val reflect.Value) error {
 	dataVal := reflect.Indirect(reflect.ValueOf(data))
 
+	// If the type of the value to write to and the data match directly,
+	// then we just set it directly instead of recursing into the structure.
 	if dataVal.Type() == val.Type() {
 		val.Set(dataVal)
 		return nil
diff --git a/mapstructure_test.go b/mapstructure_test.go
index 0c9a31f..1c24e3f 100644
--- a/mapstructure_test.go
+++ b/mapstructure_test.go
@@ -335,6 +335,26 @@
 	}
 }
 
+func TestDecode_StructMatch(t *testing.T) {
+	t.Parallel()
+
+	input := map[string]interface{}{
+		"vbar": Basic{
+			Vstring: "foo",
+		},
+	}
+
+	var result Nested
+	err := Decode(input, &result)
+	if err != nil {
+		t.Fatalf("got an err: %s", err.Error())
+	}
+
+	if result.Vbar.Vstring != "foo" {
+		t.Errorf("bad: %#v", result)
+	}
+}
+
 func TestDecode_TypeConversion(t *testing.T) {
 	input := map[string]interface{}{
 		"IntToFloat":         42,