///
/// UrlResponseInfo.swift
/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
/// https://github.com/mrousavy/nitro
/// Copyright © Marc Rousavy @ Margelo
///

import NitroModules

/**
 * Represents an instance of `UrlResponseInfo`, backed by a C++ struct.
 */
public typealias UrlResponseInfo = margelo.nitro.nitrofetch.UrlResponseInfo

public extension UrlResponseInfo {
  private typealias bridge = margelo.nitro.nitrofetch.bridge.swift

  /**
   * Create a new instance of `UrlResponseInfo`.
   */
  init(url: String, httpStatusCode: Double, httpStatusText: String, allHeaders: Dictionary<String, String>, allHeadersAsList: [HttpHeader], urlChain: [String], negotiatedProtocol: String, proxyServer: String, receivedByteCount: Double, wasCached: Bool) {
    self.init(std.string(url), httpStatusCode, std.string(httpStatusText), { () -> bridge.std__unordered_map_std__string__std__string_ in
      var __map = bridge.create_std__unordered_map_std__string__std__string_(allHeaders.count)
      for (__k, __v) in allHeaders {
        bridge.emplace_std__unordered_map_std__string__std__string_(&__map, std.string(__k), std.string(__v))
      }
      return __map
    }(), { () -> bridge.std__vector_HttpHeader_ in
      var __vector = bridge.create_std__vector_HttpHeader_(allHeadersAsList.count)
      for __item in allHeadersAsList {
        __vector.push_back(__item)
      }
      return __vector
    }(), { () -> bridge.std__vector_std__string_ in
      var __vector = bridge.create_std__vector_std__string_(urlChain.count)
      for __item in urlChain {
        __vector.push_back(std.string(__item))
      }
      return __vector
    }(), std.string(negotiatedProtocol), std.string(proxyServer), receivedByteCount, wasCached)
  }

  @inline(__always)
  var url: String {
    return String(self.__url)
  }
  
  @inline(__always)
  var httpStatusCode: Double {
    return self.__httpStatusCode
  }
  
  @inline(__always)
  var httpStatusText: String {
    return String(self.__httpStatusText)
  }
  
  @inline(__always)
  var allHeaders: Dictionary<String, String> {
    return { () -> Dictionary<String, String> in
      var __dictionary = Dictionary<String, String>(minimumCapacity: self.__allHeaders.size())
      let __keys = bridge.get_std__unordered_map_std__string__std__string__keys(self.__allHeaders)
      for __key in __keys {
        let __value = bridge.get_std__unordered_map_std__string__std__string__value(self.__allHeaders, __key)
        __dictionary[String(__key)] = String(__value)
      }
      return __dictionary
    }()
  }
  
  @inline(__always)
  var allHeadersAsList: [HttpHeader] {
    return { () -> [HttpHeader] in
                  var __array = [HttpHeader]()
                  let __count = self.__allHeadersAsList.size()
                  __array.reserveCapacity(Int(__count))
                  for __i in 0..<__count {
                    let __item = bridge.get_std__vector_HttpHeader_(self.__allHeadersAsList, __i)
                    __array.append(__item)
                  }
                  return __array
                }()
  }
  
  @inline(__always)
  var urlChain: [String] {
    return { () -> [String] in
                  var __array = [String]()
                  let __count = self.__urlChain.size()
                  __array.reserveCapacity(Int(__count))
                  for __i in 0..<__count {
                    let __item = bridge.get_std__vector_std__string_(self.__urlChain, __i)
                    __array.append(String(__item))
                  }
                  return __array
                }()
  }
  
  @inline(__always)
  var negotiatedProtocol: String {
    return String(self.__negotiatedProtocol)
  }
  
  @inline(__always)
  var proxyServer: String {
    return String(self.__proxyServer)
  }
  
  @inline(__always)
  var receivedByteCount: Double {
    return self.__receivedByteCount
  }
  
  @inline(__always)
  var wasCached: Bool {
    return self.__wasCached
  }
}
