def decode_dynamic_data(dynamic_data: dds.DynamicData, decoded_data: list): for i in range(dynamic_data.member_count): # Decoding nested structs dynamic_data_kind = dynamic_data.member_info(i).kind if dynamic_data_kind == dds.TypeKind.STRUCTURE_TYPE: decode_dynamic_data(dynamic_data.get_value(i), decoded_data) # Decoding arrays elif dynamic_data_kind == dds.TypeKind.ARRAY_TYPE: array_data = dynamic_data.get_value(i) # Decoding simple types (int, float, octet) array_data_kind = array_data.member_info(0).kind if array_data_kind != dds.TypeKind.STRUCTURE_TYPE and \ array_data_kind != dds.TypeKind.ENUMERATION_TYPE: decoded_data.extend(list(dynamic_data[i])) # Decoding enums or arrays else: for j in range(array_data.member_count): # Decoding nested structs array_data_kind = array_data.member_info(j).kind if array_data_kind == dds.TypeKind.STRUCTURE_TYPE: decode_dynamic_data(array_data.get_value(j), decoded_data) # Decoding enums elif array_data_kind == dds.TypeKind.ENUMERATION_TYPE: enum_data = array_data.get_value(array_data.member_info(j).name) decoded_data.append(enum_data.ordinal) # Decoding enums elif dynamic_data_kind == dds.TypeKind.ENUMERATION_TYPE: enum_data = dynamic_data.get_value(dynamic_data.member_info(i).name) decoded_data.append(enum_data.ordinal) # Decoding simple type (int, float, octet) else: decoded_data.append(dynamic_data.get_value(i))