HttpClientResponseHeaders
using System.ClientModel.Internal;
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Runtime.CompilerServices;
namespace System.ClientModel.Primitives
{
    [System.Runtime.CompilerServices.NullableContext(1)]
    [System.Runtime.CompilerServices.Nullable(0)]
    internal class HttpClientResponseHeaders : PipelineResponseHeaders
    {
        private readonly HttpResponseMessage _httpResponse;
        private readonly HttpContent _httpResponseContent;
        public HttpClientResponseHeaders(HttpResponseMessage response, HttpContent responseContent)
        {
            _httpResponse = response;
            _httpResponseContent = responseContent;
        }
        public override bool TryGetValue(string name, [System.Runtime.CompilerServices.Nullable(2)] out string value)
        {
            Argument.AssertNotNullOrEmpty(name, "name");
            return TryGetHeader(_httpResponse.Headers, _httpResponseContent, name, out value);
        }
        public override bool TryGetValues(string name, [System.Runtime.CompilerServices.Nullable(new byte[] {
            2,
            1
        })] out IEnumerable<string> values)
        {
            Argument.AssertNotNullOrEmpty(name, "name");
            return TryGetHeader(_httpResponse.Headers, _httpResponseContent, name, out values);
        }
        [return: System.Runtime.CompilerServices.Nullable(new byte[] {
            1,
            0,
            1,
            1
        })]
        public override IEnumerator<KeyValuePair<string, string>> GetEnumerator()
        {
            return GetHeadersStringValues(_httpResponse.Headers, _httpResponseContent).GetEnumerator();
        }
        private static bool TryGetHeader(HttpHeaders headers, [System.Runtime.CompilerServices.Nullable(2)] HttpContent content, string name, [System.Runtime.CompilerServices.Nullable(2)] [System.Diagnostics.CodeAnalysis.NotNullWhen(true)] out string value)
        {
            if (TryGetHeader(headers, content, name, out IEnumerable<string> values)) {
                value = JoinHeaderValues(values);
                return true;
            }
            value = null;
            return false;
        }
        private static bool TryGetHeader(HttpHeaders headers, [System.Runtime.CompilerServices.Nullable(2)] HttpContent content, string name, [System.Runtime.CompilerServices.Nullable(new byte[] {
            2,
            1
        })] [System.Diagnostics.CodeAnalysis.NotNullWhen(true)] out IEnumerable<string> values)
        {
            if (!headers.TryGetValues(name, out values))
                return content?.Headers.TryGetValues(name, out values) ?? false;
            return true;
        }
        [return: System.Runtime.CompilerServices.Nullable(new byte[] {
            1,
            0,
            1,
            1
        })]
        private static IEnumerable<KeyValuePair<string, string>> GetHeadersStringValues(HttpHeaders headers, [System.Runtime.CompilerServices.Nullable(2)] HttpContent content)
        {
            foreach (KeyValuePair<string, IEnumerable<string>> header in headers) {
                yield return new KeyValuePair<string, string>(header.Key, JoinHeaderValues(header.Value));
            }
            if (content != null) {
                foreach (KeyValuePair<string, IEnumerable<string>> header2 in content.Headers) {
                    yield return new KeyValuePair<string, string>(header2.Key, JoinHeaderValues(header2.Value));
                }
            }
        }
        private static string JoinHeaderValues(IEnumerable<string> values)
        {
            return string.Join(",", values);
        }
    }
}