in sdk/src/azure/iot/az_iot_provisioning_client.c [419:521]
AZ_INLINE az_result az_iot_provisioning_client_parse_payload(
az_span received_payload,
az_iot_provisioning_client_register_response* out_response)
{
// Parse the payload:
az_json_reader jr;
_az_RETURN_IF_FAILED(az_json_reader_init(&jr, received_payload, NULL));
_az_RETURN_IF_FAILED(az_json_reader_next_token(&jr));
if (jr.token.kind != AZ_JSON_TOKEN_BEGIN_OBJECT)
{
return AZ_ERROR_UNEXPECTED_CHAR;
}
out_response->registration_state = _az_iot_provisioning_registration_state_default();
bool found_operation_id = false;
bool found_operation_status = false;
bool found_error = false;
while (az_result_succeeded(az_json_reader_next_token(&jr))
&& jr.token.kind != AZ_JSON_TOKEN_END_OBJECT)
{
if (az_json_token_is_text_equal(&jr.token, AZ_SPAN_FROM_STR("operationId")))
{
_az_RETURN_IF_FAILED(az_json_reader_next_token(&jr));
if (jr.token.kind != AZ_JSON_TOKEN_STRING)
{
return AZ_ERROR_ITEM_NOT_FOUND;
}
out_response->operation_id = jr.token.slice;
found_operation_id = true;
}
else if (az_json_token_is_text_equal(&jr.token, AZ_SPAN_FROM_STR("status")))
{
_az_RETURN_IF_FAILED(az_json_reader_next_token(&jr));
if (jr.token.kind != AZ_JSON_TOKEN_STRING)
{
return AZ_ERROR_ITEM_NOT_FOUND;
}
_az_RETURN_IF_FAILED(_az_iot_provisioning_client_parse_operation_status(
jr.token.slice, &out_response->operation_status));
found_operation_status = true;
}
else if (az_json_token_is_text_equal(&jr.token, AZ_SPAN_FROM_STR("registrationState")))
{
_az_RETURN_IF_FAILED(az_json_reader_next_token(&jr));
_az_RETURN_IF_FAILED(_az_iot_provisioning_client_payload_registration_state_parse(
&jr, &out_response->registration_state));
}
else if (az_json_token_is_text_equal(&jr.token, AZ_SPAN_FROM_STR("trackingId")))
{
_az_RETURN_IF_FAILED(az_json_reader_next_token(&jr));
if (jr.token.kind != AZ_JSON_TOKEN_STRING)
{
return AZ_ERROR_ITEM_NOT_FOUND;
}
out_response->registration_state.error_tracking_id = jr.token.slice;
}
else if (az_json_token_is_text_equal(&jr.token, AZ_SPAN_FROM_STR("message")))
{
_az_RETURN_IF_FAILED(az_json_reader_next_token(&jr));
if (jr.token.kind != AZ_JSON_TOKEN_STRING)
{
return AZ_ERROR_ITEM_NOT_FOUND;
}
out_response->registration_state.error_message = jr.token.slice;
}
else if (az_json_token_is_text_equal(&jr.token, AZ_SPAN_FROM_STR("timestampUtc")))
{
_az_RETURN_IF_FAILED(az_json_reader_next_token(&jr));
if (jr.token.kind != AZ_JSON_TOKEN_STRING)
{
return AZ_ERROR_ITEM_NOT_FOUND;
}
out_response->registration_state.error_timestamp = jr.token.slice;
}
else if (az_result_succeeded(_az_iot_provisioning_client_parse_payload_error_code(
&jr, &out_response->registration_state)))
{
found_error = true;
}
else
{
// ignore other tokens
_az_RETURN_IF_FAILED(az_json_reader_skip_children(&jr));
}
}
if (!(found_operation_status && found_operation_id))
{
out_response->operation_id = AZ_SPAN_EMPTY;
out_response->operation_status = AZ_IOT_PROVISIONING_STATUS_FAILED;
if (!found_error)
{
return AZ_ERROR_ITEM_NOT_FOUND;
}
}
return AZ_OK;
}