support nested structs and arrays!