/**
@page migration_shadow Shadow
@brief How to migrate a Shadow application from v3 to v4.

The Shadow library has been redesigned in v4 as a thread-aware library supporting asynchronous operations.

The features of the Shadow libraries in v3 and v4 are defined by the common AWS service; therefore, the two versions are similar.

@section migration_shadow_removed Removed features
@brief The following features which were present in v3 were removed in v4.
- Shadow JSON functions <br>
  Version 3 has functions for generating and parsing JSON Shadow documents. These functions have been removed in v4 due to their high memory usage. <br>
  <b>Workaround:</b> `snprintf` can be used to generate Shadow documents. JSON parsing can be done through third-party libraries.

@section migration_shadow_functions Functions
@brief The following table lists equivalent API functions in v3 and v4. These functions are the API functions declared in:
- In v3: <a href="https://github.com/aws/aws-iot-device-sdk-embedded-C/blob/0da87f06f1501fad7b03b5d89a1322cc8a8848b4/include/aws_iot_shadow_interface.h">aws_iot_shadow_interface.h</a>
- In v4: [Shadow functions](@ref shadow_functions)

<table>
    <tr>
        <th>Version 3</th>
        <th>Version 4</th>
        <th>Notes</th>
    </tr>
    <tr>
        <td>aws_iot_shadow_init</td>
        <td>@ref shadow_function_init</td>
        <td>In v3, this function initializes a single client.<br>In v4, this function initializes the entire library.</td>
    </tr>
    <tr>
        <td>aws_iot_shadow_free</td>
        <td>@ref shadow_function_cleanup</td>
        <td>In v3, this function frees a single client.<br>In v4, this function cleans up the entire library.</td>
    </tr>
    <tr>
        <td>aws_iot_mqtt_connect<br>aws_iot_shadow_disconnect</td>
        <td><i>None</i></td>
        <td>
            These functions were thin wrappers for the MQTT connect and disconnect functions.<br>
            Applications using these v3 functions should replace them with calls to:<br>
            @ref mqtt_function_connect <br>
            @ref mqtt_function_disconnect
        </td>
    </tr>
    <tr>
        <td>aws_iot_shadow_yield</td>
        <td><i>None</i></td>
        <td>Removed in favor of background tasks.<br>Nothing needs to be changed in an application.</td>
    </tr>
    <tr>
        <td>aws_iot_shadow_update</td>
        <td>@ref shadow_function_updatesync</td>
        <td>@ref shadow_function_updateasync is the equivalent asynchronous function.</td>
    </tr>
    <tr>
        <td>aws_iot_shadow_get</td>
        <td>@ref shadow_function_getsync</td>
        <td>@ref shadow_function_getasync is the equivalent asynchronous function.</td>
    </tr>
    <tr>
        <td>aws_iot_shadow_delete</td>
        <td>@ref shadow_function_deletesync</td>
        <td>@ref shadow_function_deleteasync is the equivalent asynchronous function.</td>
    </tr>
    <tr>
        <td>aws_iot_shadow_register_delta</td>
        <td>@ref shadow_function_setdeltacallback</td>
        <td></td>
    </tr>
    <tr>
        <td>
            aws_iot_shadow_reset_last_received_version<br>
            aws_iot_shadow_get_last_received_version<br>
            aws_iot_shadow_enable_discard_old_delta_msgs<br>
            aws_iot_shadow_disable_discard_old_delta_msgs<br>
        </td>
        <td><i>None</i></td>
        <td>
            Removed due to removal of JSON parsing.<br>
            The application should parse received Shadow documents and decide whether to discard them based on the version key.
        </td>
    </tr>
    <tr>
        <td>aws_iot_shadow_set_autoreconnect_status</td>
        <td><i>None</i></td>
        <td>Removed due to removal of auto-reconnect in the MQTT library.</td>
    </tr>
</table>
*/
