in sdk/src/azure/iot/az_iot_provisioning_client.c [305:382]
AZ_INLINE az_result _az_iot_provisioning_client_payload_registration_state_parse(
az_json_reader* jr,
az_iot_provisioning_client_registration_state* out_state)
{
if (jr->token.kind != AZ_JSON_TOKEN_BEGIN_OBJECT)
{
return AZ_ERROR_UNEXPECTED_CHAR;
}
bool found_assigned_hub = false;
bool found_device_id = 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("assignedHub")))
{
_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_state->assigned_hub_hostname = jr->token.slice;
found_assigned_hub = true;
}
else if (az_json_token_is_text_equal(&jr->token, AZ_SPAN_FROM_STR("deviceId")))
{
_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_state->device_id = jr->token.slice;
found_device_id = true;
}
else if (az_json_token_is_text_equal(&jr->token, AZ_SPAN_FROM_STR("payload")))
{
_az_RETURN_IF_FAILED(az_json_reader_next_token(jr));
_az_RETURN_IF_FAILED(
_az_iot_provisioning_client_get_json_object_span(jr, &out_state->payload));
}
else if (az_json_token_is_text_equal(&jr->token, AZ_SPAN_FROM_STR("errorMessage")))
{
_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_state->error_message = jr->token.slice;
}
else if (az_json_token_is_text_equal(&jr->token, AZ_SPAN_FROM_STR("lastUpdatedDateTimeUtc")))
{
_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_state->error_timestamp = jr->token.slice;
}
else if (az_result_succeeded(
_az_iot_provisioning_client_parse_payload_error_code(jr, out_state)))
{
// Do nothing
}
else
{
// ignore other tokens
_az_RETURN_IF_FAILED(az_json_reader_skip_children(jr));
}
}
if (found_assigned_hub != found_device_id)
{
return AZ_ERROR_ITEM_NOT_FOUND;
}
return AZ_OK;
}