The c function decode_payload does not work in case a custom property was attached to a metric.
My simple program prints:
"ERROR: Wrong metric name: TypeId"
com_cirruslink_sparkplug_protobuf_Payload payload;
get_next_payload(&payload);
payload.uuid = "myuuid";
com_cirruslink_sparkplug_protobuf_Payload_Metric metric1 = com_cirruslink_sparkplug_protobuf_Payload_Metric_init_default;
init_metric(&metric1, myMetricName, true, 1, METRIC_DATA_TYPE_INT32, false, false, false, &valUint32, sizeof(uint32_t));
com_cirruslink_sparkplug_protobuf_Payload_PropertySet properties1 = com_cirruslink_sparkplug_protobuf_Payload_PropertySet_init_default;
add_property_to_set(&properties1, "TypeId", PROPERTY_DATA_TYPE_UINT32, false, &typeId, sizeof(typeId));
add_propertyset_to_metric(&metric1, &properties1);
add_metric_to_payload(&payload, &metric1);
size_t buffer_length = 1024;
uint8_t *binary_buffer = (uint8_t *)malloc(buffer_length * sizeof(uint8_t));
size_t message_length = encode_payload(&binary_buffer, buffer_length, &payload);
free_payload(&payload);
com_cirruslink_sparkplug_protobuf_Payload inbound_payload = com_cirruslink_sparkplug_protobuf_Payload_init_zero;
if(!decode_payload(&inbound_payload, binary_buffer, message_length))
{
fprintf(stderr, "ERROR: Failed to decode the payload\n");
}
if (inbound_payload.metrics_count != 1)
{
fprintf(stderr, "ERROR: Wrong metrics_count: %ld\n", inbound_payload.metrics_count);
}
if (strcmp(inbound_payload.metrics[0].name, myMetricName) != 0)
{
fprintf(stderr, "ERROR: Wrong metric name: %s\n", inbound_payload.metrics[0].name);
}
free_payload(&inbound_payload);
free(binary_buffer);
fprintf(stdout, "Testing finished\n");
return 0;