use decode_struct