public async Task <ResponseWithHeaders <IReadOnlyList <TwinData>, QueryGetTwinsHeaders> > GetTwinsAsync(QuerySpecification querySpecification, string xMsContinuation = null, string xMsMaxItemCount = null, CancellationToken cancellationToken = default)
        {
            if (querySpecification == null)
            {
                throw new ArgumentNullException(nameof(querySpecification));
            }

            using var message = CreateGetTwinsRequest(querySpecification, xMsContinuation, xMsMaxItemCount);
            await _pipeline.SendAsync(message, cancellationToken).ConfigureAwait(false);

            var headers = new QueryGetTwinsHeaders(message.Response);

            switch (message.Response.Status)
            {
            case 200:
            {
                IReadOnlyList <TwinData> value = default;
                using var document = await JsonDocument.ParseAsync(message.Response.ContentStream, default, cancellationToken).ConfigureAwait(false);

                List <TwinData> array = new List <TwinData>();
                foreach (var item in document.RootElement.EnumerateArray())
                {
                    array.Add(TwinData.DeserializeTwinData(item));
                }
                value = array;
                return(ResponseWithHeaders.FromValue(value, headers, message.Response));
            }
        public async Task <Response <TwinData> > GetDeviceTwinAsync(string id, CancellationToken cancellationToken = default)
        {
            if (id == null)
            {
                throw new ArgumentNullException(nameof(id));
            }

            using var message = CreateGetDeviceTwinRequest(id);
            await _pipeline.SendAsync(message, cancellationToken).ConfigureAwait(false);

            switch (message.Response.Status)
            {
            case 200:
            {
                TwinData value = default;
                using var document = await JsonDocument.ParseAsync(message.Response.ContentStream, default, cancellationToken).ConfigureAwait(false);

                if (document.RootElement.ValueKind == JsonValueKind.Null)
                {
                    value = null;
                }
                else
                {
                    value = TwinData.DeserializeTwinData(document.RootElement);
                }
                return(Response.FromValue(value, message.Response));
            }