<?xml version="1.0" encoding="utf-8"?>
<AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010">

  <Type Name="web::details::uri_components">
    <Expand>
        <Item Name="scheme">m_scheme</Item>
        <Item Name="host">m_host</Item>
        <Item Name="port">m_port</Item>
        <Item Name="user info">m_user_info</Item>
        <Item Name="path">m_path</Item>
        <Item Name="query">m_query</Item>
        <Item Name="fragment">m_fragment</Item>
      </Expand>
  </Type>

  <Type Name="web::uri">
    <DisplayString>{m_uri}</DisplayString>
      <Expand>
        <ExpandedItem>m_components</ExpandedItem>
      </Expand>
  </Type>

  <Type Name="web::uri_builder">
      <Expand>
        <ExpandedItem>m_uri</ExpandedItem>
      </Expand>
  </Type>

  <Type Name="web::credentials">
    <DisplayString>{m_username}</DisplayString>
      <Expand>
        <Item Name="username">m_username</Item>
      </Expand>
  </Type>

  <Type Name="web::web_proxy">
    <DisplayString Condition="m_mode==web::web_proxy::use_default">{"default"}</DisplayString>
    <DisplayString Condition="m_mode==web::web_proxy::disabled">{"disabled"}</DisplayString>
      <DisplayString Condition="m_mode==web::web_proxy::use_auto_discovery">{"auto discovery"}</DisplayString>
    <DisplayString Condition="m_mode==web::web_proxy::user_provided_">{m_address}</DisplayString>
      <Expand>
        <Item Name="mode" Condition="m_mode==web::web_proxy::use_default">"default"</Item>
        <Item Name="mode" Condition="m_mode==web::web_proxy::disabled">"disabled"</Item>
        <Item Name="mode" Condition="m_mode==web::web_proxy::use_auto_discovery">"auto discovery"</Item>
        <Item Name="mode" Condition="m_mode==web::web_proxy::user_provided_">m_address</Item>
        <Item Name="credentials" Condition="m_credentials.m_is_set==true">m_credentials</Item>
      </Expand>
  </Type>

  <Type Name="web::http::client::http_client_config">
    <Expand>
        <Item Name="proxy">m_proxy</Item>
        <Item Name="credentials">m_credentials</Item>
        <Item Name="timeout">m_timeout._MyRep</Item>
        <Item Name="guarantee order">m_guarantee_order</Item>
        <Item Name="chunk size">m_chunksize</Item>
    </Expand>
  </Type>

  <Type Name="web::http::client::http_client">
    <DisplayString>{_base_uri}</DisplayString>
  </Type>

  <Type Name="web::http::experimental::listener::http_listener">
    <DisplayString>{m_uri}</DisplayString>
  </Type>

  <Type Name="web::http::http_request">
    <DisplayString>[{_m_impl._Ptr->m_method}]</DisplayString>
    <Expand>
      <Item Name="method">_m_impl._Ptr->m_method</Item>
      <Item Name="request uri">_m_impl._Ptr->m_uri</Item>
      <Item Name="headers">((*((web::http::details::http_msg_base*)(&amp;(*((web::http::details::_http_request*)((_m_impl)._Ptr)))))).m_headers).m_headers</Item>
    </Expand>
  </Type>

  <Type Name="web::http::http_response">
    <DisplayString>[{_m_impl._Ptr->m_status_code}, {_m_impl._Ptr->m_reason_phrase}]</DisplayString>
    <Expand>
      <Item Name="status code">_m_impl._Ptr->m_status_code</Item>
      <Item Name="reason phrase">_m_impl._Ptr->m_reason_phrase</Item>
      <Item Name="headers">((*((web::http::details::http_msg_base*)(&amp;(*((web::http::details::_http_request*)((_m_impl)._Ptr)))))).m_headers).m_headers</Item>
    </Expand>
  </Type>

  <Type Name="web::websockets::client::websocket_client_config">
    <Expand>
      <Item Name="proxy">m_proxy</Item>
      <Item Name="credentials">m_credentials</Item>
      <Item Name="request headers">m_headers</Item>
    </Expand>
  </Type>

  <Type Name="web::websockets::client::websocket_client">
    <DisplayString>{m_client._Ptr->m_callback_client._Ptr->m_uri}</DisplayString>
    <Expand>
      <Item Name="uri">m_client._Ptr->m_callback_client._Ptr->m_uri</Item>
      <Item Name="config">m_client._Ptr->m_callback_client._Ptr->m_config</Item>
    </Expand>
  </Type>

  <Type Name="web::websockets::client::websocket_callback_client">
    <DisplayString>{m_client._Ptr->m_uri}</DisplayString>
    <Expand>
      <Item Name="uri">m_client._Ptr->m_uri</Item>
      <Item Name="config">m_client._Ptr->m_config</Item>
    </Expand>
  </Type>

  <Type Name="web::websockets::client::websocket_outgoing_message">
    <Expand>
      <Item Name="message type" Condition="m_msg_type==web::websockets::client::websocket_message_type::text_message">text"</Item>
      <Item Name="message type" Condition="m_msg_type==web::websockets::client::websocket_message_type::binary_message">"binary"</Item>
      <Item Name="message type" Condition="m_msg_type==web::websockets::client::websocket_message_type::close">"close"</Item>
      <Item Name="message type" Condition="m_msg_type==web::websockets::client::websocket_message_type::ping">"ping"</Item>
      <Item Name="message type" Condition="m_msg_type==web::websockets::client::websocket_message_type::pong">"pong"</Item>
      <Item Name="length">m_length</Item>
      <Item Name="body">m_body</Item>
    </Expand>
  </Type>

  <Type Name="web::websockets::client::websocket_incoming_message">
    <Expand>
      <Item Name="message type" Condition="m_msg_type==web::websockets::client::websocket_message_type::text_message">"text"</Item>
      <Item Name="message type" Condition="m_msg_type==web::websockets::client::websocket_message_type::binary_message">"binary"</Item>
      <Item Name="message type" Condition="m_msg_type==web::websockets::client::websocket_message_type::close">"close"</Item>
      <Item Name="message type" Condition="m_msg_type==web::websockets::client::websocket_message_type::ping">"ping"</Item>
      <Item Name="message type" Condition="m_msg_type==web::websockets::client::websocket_message_type::pong">"pong"</Item>
      <Item Name="body">m_body</Item>
    </Expand>
  </Type>

  <Type Name="web::json::number">
    <DisplayString Condition="(m_type==type::signed_type)">
      {m_intval}
    </DisplayString>

    <DisplayString Condition="(m_type==type::unsigned_type)">
      {m_uintval}
    </DisplayString>

    <DisplayString Condition="(m_type==type::double_type)">
      {m_value}
    </DisplayString>
  </Type>

  <Type Name="web::json::array">
    <DisplayString>{{size = {m_elements._Mylast - m_elements._Myfirst}}}</DisplayString>
    <Expand>
      <ArrayItems>
        <Size>m_elements._Mylast - m_elements._Myfirst</Size>
        <ValuePointer>m_elements._Myfirst</ValuePointer>
      </ArrayItems>
    </Expand>
  </Type>

  <Type Name="web::json::object">
    <DisplayString>{{size = {m_elements._Mylast - m_elements._Myfirst}}}</DisplayString>
    <Expand>
      <ArrayItems>
        <Size>m_elements._Mylast - m_elements._Myfirst</Size>
        <ValuePointer>m_elements._Myfirst</ValuePointer>
      </ArrayItems>
    </Expand>
  </Type>

  <Type Name="web::json::value">
    <DisplayString Condition="(m_kind==web::json::value::Number)">
      {(*((web::json::details::_Number*)((m_value)._Myptr))).m_number}
    </DisplayString>

    <DisplayString Condition="m_kind==web::json::value::Boolean">
      {(*((web::json::details::_Boolean*)(m_value._Myptr))).m_value}
    </DisplayString>

    <DisplayString Condition="(m_kind==web::json::value::String)">
      {((((&amp;((*((web::json::details::_String*)(m_value._Myptr))).m_string)))))}
    </DisplayString>

    <DisplayString Condition="m_kind==web::json::value::Null">null</DisplayString>

    <DisplayString Condition="m_kind==0xcccccccc">not initialized</DisplayString>
    <DisplayString Condition="m_kind==0xcdcdcdcd">not initialized</DisplayString>

    <DisplayString Condition="m_kind==web::json::value::Object">
      object {(*((web::json::details::_Object*)(m_value._Myptr))).m_object}
    </DisplayString>

    <DisplayString Condition="m_kind==web::json::value::Array">
      array {(*((web::json::details::_Array*)(m_value._Myptr))).m_array}
    </DisplayString>

    <Expand>
      <ArrayItems Condition="m_kind==web::json::value::Object">
        <Size>(*((web::json::details::_Object*)(m_value._Myptr))).m_object.m_elements._Mylast - (*((web::json::details::_Object*)(m_value._Myptr))).m_object.m_elements._Myfirst</Size>
        <ValuePointer>(*((web::json::details::_Object*)(m_value._Myptr))).m_object.m_elements._Myfirst</ValuePointer>
      </ArrayItems>

      <ArrayItems Condition="m_kind==web::json::value::Array">
        <Size>(*((web::json::details::_Array*)(m_value._Myptr))).m_array.m_elements._Mylast - (*((web::json::details::_Array*)(m_value._Myptr))).m_array.m_elements._Myfirst</Size>
        <ValuePointer>(*((web::json::details::_Array*)(m_value._Myptr))).m_array.m_elements._Myfirst</ValuePointer>
      </ArrayItems>
    </Expand>

  </Type>

</AutoVisualizer>