@@ -946,6 +946,52 @@ func sampleSerializedEmbeddedTestModel() *Blog {
946
946
return blog
947
947
}
948
948
949
+ func TestUnmarshalNestedStructPtr (t * testing.T ) {
950
+ type Director struct {
951
+ Firstname string `json:"firstname"`
952
+ Surname string `json:"surname"`
953
+ }
954
+ type Movie struct {
955
+ ID string `jsonapi:"primary,movies"`
956
+ Name string `jsonapi:"attr,name"`
957
+ Director * Director `jsonapi:"attr,director"`
958
+ }
959
+ sample := map [string ]interface {}{
960
+ "data" : map [string ]interface {}{
961
+ "type" : "movies" ,
962
+ "id" : "123" ,
963
+ "attributes" : map [string ]interface {}{
964
+ "name" : "The Shawshank Redemption" ,
965
+ "director" : map [string ]interface {}{
966
+ "firstname" : "Frank" ,
967
+ "surname" : "Darabont" ,
968
+ },
969
+ },
970
+ },
971
+ }
972
+
973
+ data , err := json .Marshal (sample )
974
+ if err != nil {
975
+ t .Fatal (err )
976
+ }
977
+ in := bytes .NewReader (data )
978
+ out := new (Movie )
979
+
980
+ if err := UnmarshalPayload (in , out ); err != nil {
981
+ t .Fatal (err )
982
+ }
983
+
984
+ if out .Name != "The Shawshank Redemption" {
985
+ t .Fatalf ("expected out.Name to be `The Shawshank Redemption`, but got `%s`" , out .Name )
986
+ }
987
+ if out .Director .Firstname != "Frank" {
988
+ t .Fatalf ("expected out.Director.Firstname to be `Frank`, but got `%s`" , out .Director .Firstname )
989
+ }
990
+ if out .Director .Surname != "Darabont" {
991
+ t .Fatalf ("expected out.Director.Surname to be `Darabont`, but got `%s`" , out .Director .Surname )
992
+ }
993
+ }
994
+
949
995
func TestUnmarshalNestedStruct (t * testing.T ) {
950
996
951
997
boss := map [string ]interface {}{
0 commit comments