# encoding: utf-8
# Code generated by Microsoft (R) AutoRest Code Generator.
# Changes may cause incorrect behavior and will be lost if the code is
# regenerated.

module Azure::CognitiveServices::VideoSearch::V1_0
  #
  # The Video Search API lets you search on Bing for video that are relevant to
  # the user's search query, for insights about a video or for videos that are
  # trending based on search requests made by others. This section provides
  # technical details about the query parameters and headers that you use to
  # request videos and the JSON response objects that contain them. For
  # examples that show how to make requests, see [Searching the Web for
  # Videos](https://docs.microsoft.com/azure/cognitive-services/bing-video-search/search-the-web).
  #
  class VideosOperations
    include MsRestAzure

    #
    # Creates and initializes a new instance of the VideosOperations class.
    # @param client service class for accessing basic functionality.
    #
    def initialize(client)
      @client = client
    end

    # @return [VideoSearchClient] reference to the VideoSearchClient
    attr_reader :client

    #
    # The Video Search API lets you send a search query to Bing and get back a list
    # of videos that are relevant to the search query. This section provides
    # technical details about the query parameters and headers that you use to
    # request videos and the JSON response objects that contain them. For examples
    # that show how to make requests, see [Searching the Web for
    # Videos](https://docs.microsoft.com/azure/cognitive-services/bing-video-search/search-the-web).
    #
    # @param query [String] The user's search query string. The query string cannot
    # be empty. The query string may contain [Bing Advanced
    # Operators](http://msdn.microsoft.com/library/ff795620.aspx). For example, to
    # limit videos to a specific domain, use the
    # [site:](http://msdn.microsoft.com/library/ff795613.aspx) operator. Use this
    # parameter only with the Video Search API. Do not specify this parameter when
    # calling the Trending Videos API.
    # @param accept_language [String] A comma-delimited list of one or more
    # languages to use for user interface strings. The list is in decreasing order
    # of preference. For additional information, including expected format, see
    # [RFC2616](http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html). This
    # header and the
    # [setLang](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-video-api-v7-reference#setlang)
    # query parameter are mutually exclusive; do not specify both. If you set this
    # header, you must also specify the
    # [cc](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-video-api-v7-reference#cc)
    # query parameter. To determine the market to return results for, Bing uses the
    # first supported language it finds from the list and combines it with the cc
    # parameter value. If the list does not include a supported language, Bing
    # finds the closest language and market that supports the request or it uses an
    # aggregated or default market for the results. To determine the market that
    # Bing used, see the BingAPIs-Market header. Use this header and the cc query
    # parameter only if you specify multiple languages. Otherwise, use the
    # [mkt](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-video-api-v7-reference#mkt)
    # and
    # [setLang](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-video-api-v7-reference#setlang)
    # query parameters. A user interface string is a string that's used as a label
    # in a user interface. There are few user interface strings in the JSON
    # response objects. Any links to Bing.com properties in the response objects
    # apply the specified language.
    # @param user_agent [String] The user agent originating the request. Bing uses
    # the user agent to provide mobile users with an optimized experience. Although
    # optional, you are encouraged to always specify this header. The user-agent
    # should be the same string that any commonly used browser sends. For
    # information about user agents, see [RFC
    # 2616](http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html). The following
    # are examples of user-agent strings. Windows Phone: Mozilla/5.0 (compatible;
    # MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA;
    # Lumia 822). Android: Mozilla / 5.0 (Linux; U; Android 2.3.5; en - us; SCH -
    # I500 Build / GINGERBREAD) AppleWebKit / 533.1 (KHTML; like Gecko) Version /
    # 4.0 Mobile Safari / 533.1. iPhone: Mozilla / 5.0 (iPhone; CPU iPhone OS 6_1
    # like Mac OS X) AppleWebKit / 536.26 (KHTML; like Gecko) Mobile / 10B142
    # iPhone4; 1 BingWeb / 3.03.1428.20120423. PC: Mozilla / 5.0 (Windows NT 6.3;
    # WOW64; Trident / 7.0; Touch; rv:11.0) like Gecko. iPad: Mozilla / 5.0 (iPad;
    # CPU OS 7_0 like Mac OS X) AppleWebKit / 537.51.1 (KHTML, like Gecko) Version
    # / 7.0 Mobile / 11A465 Safari / 9537.53
    # @param client_id [String] Bing uses this header to provide users with
    # consistent behavior across Bing API calls. Bing often flights new features
    # and improvements, and it uses the client ID as a key for assigning traffic on
    # different flights. If you do not use the same client ID for a user across
    # multiple requests, then Bing may assign the user to multiple conflicting
    # flights. Being assigned to multiple conflicting flights can lead to an
    # inconsistent user experience. For example, if the second request has a
    # different flight assignment than the first, the experience may be unexpected.
    # Also, Bing can use the client ID to tailor web results to that client ID’s
    # search history, providing a richer experience for the user. Bing also uses
    # this header to help improve result rankings by analyzing the activity
    # generated by a client ID. The relevance improvements help with better quality
    # of results delivered by Bing APIs and in turn enables higher click-through
    # rates for the API consumer. IMPORTANT: Although optional, you should consider
    # this header required. Persisting the client ID across multiple requests for
    # the same end user and device combination enables 1) the API consumer to
    # receive a consistent user experience, and 2) higher click-through rates via
    # better quality of results from the Bing APIs. Each user that uses your
    # application on the device must have a unique, Bing generated client ID. If
    # you do not include this header in the request, Bing generates an ID and
    # returns it in the X-MSEdge-ClientID response header. The only time that you
    # should NOT include this header in a request is the first time the user uses
    # your app on that device. Use the client ID for each Bing API request that
    # your app makes for this user on the device. Persist the client ID. To persist
    # the ID in a browser app, use a persistent HTTP cookie to ensure the ID is
    # used across all sessions. Do not use a session cookie. For other apps such as
    # mobile apps, use the device's persistent storage to persist the ID. The next
    # time the user uses your app on that device, get the client ID that you
    # persisted. Bing responses may or may not include this header. If the response
    # includes this header, capture the client ID and use it for all subsequent
    # Bing requests for the user on that device. If you include the
    # X-MSEdge-ClientID, you must not include cookies in the request.
    # @param client_ip [String] The IPv4 or IPv6 address of the client device. The
    # IP address is used to discover the user's location. Bing uses the location
    # information to determine safe search behavior. Although optional, you are
    # encouraged to always specify this header and the X-Search-Location header. Do
    # not obfuscate the address (for example, by changing the last octet to 0).
    # Obfuscating the address results in the location not being anywhere near the
    # device's actual location, which may result in Bing serving erroneous results.
    # @param location [String] A semicolon-delimited list of key/value pairs that
    # describe the client's geographical location. Bing uses the location
    # information to determine safe search behavior and to return relevant local
    # content. Specify the key/value pair as <key>:<value>. The following are the
    # keys that you use to specify the user's location. lat (required): The
    # latitude of the client's location, in degrees. The latitude must be greater
    # than or equal to -90.0 and less than or equal to +90.0. Negative values
    # indicate southern latitudes and positive values indicate northern latitudes.
    # long (required): The longitude of the client's location, in degrees. The
    # longitude must be greater than or equal to -180.0 and less than or equal to
    # +180.0. Negative values indicate western longitudes and positive values
    # indicate eastern longitudes. re (required): The radius, in meters, which
    # specifies the horizontal accuracy of the coordinates. Pass the value returned
    # by the device's location service. Typical values might be 22m for GPS/Wi-Fi,
    # 380m for cell tower triangulation, and 18,000m for reverse IP lookup. ts
    # (optional): The UTC UNIX timestamp of when the client was at the location.
    # (The UNIX timestamp is the number of seconds since January 1, 1970.) head
    # (optional): The client's relative heading or direction of travel. Specify the
    # direction of travel as degrees from 0 through 360, counting clockwise
    # relative to true north. Specify this key only if the sp key is nonzero. sp
    # (optional): The horizontal velocity (speed), in meters per second, that the
    # client device is traveling. alt (optional): The altitude of the client
    # device, in meters. are (optional): The radius, in meters, that specifies the
    # vertical accuracy of the coordinates. Specify this key only if you specify
    # the alt key. Although many of the keys are optional, the more information
    # that you provide, the more accurate the location results are. Although
    # optional, you are encouraged to always specify the user's geographical
    # location. Providing the location is especially important if the client's IP
    # address does not accurately reflect the user's physical location (for
    # example, if the client uses VPN). For optimal results, you should include
    # this header and the X-MSEdge-ClientIP header, but at a minimum, you should
    # include this header.
    # @param country_code [String] A 2-character country code of the country where
    # the results come from. This API supports only the United States market. If
    # you specify this query parameter, it must be set to us. If you set this
    # parameter, you must also specify the Accept-Language header. Bing uses the
    # first supported language it finds from the languages list, and combine that
    # language with the country code that you specify to determine the market to
    # return results for. If the languages list does not include a supported
    # language, Bing finds the closest language and market that supports the
    # request, or it may use an aggregated or default market for the results
    # instead of a specified one. You should use this query parameter and the
    # Accept-Language query parameter only if you specify multiple languages;
    # otherwise, you should use the mkt and setLang query parameters. This
    # parameter and the mkt query parameter are mutually exclusive—do not specify
    # both.
    # @param count [Integer] The number of videos to return in the response. The
    # actual number delivered may be less than requested. The default is 35. The
    # maximum is 105. You may use this parameter along with the offset parameter to
    # page results. For example, if your user interface presents 20 videos per
    # page, set count to 20 and offset to 0 to get the first page of results. For
    # each subsequent page, increment offset by 20 (for example, 0, 20, 40). Use
    # this parameter only with the Video Search API. Do not specify this parameter
    # when calling the Trending Videos API or the Web Search API.
    # @param freshness [Freshness] Filter videos by the date and time that Bing
    # discovered the video. The following are the possible filter values. Day:
    # Return videos discovered within the last 24 hours. Week: Return videos
    # discovered within the last 7 days. Month: Return videos discovered within the
    # last 30 days. Possible values include: 'Day', 'Week', 'Month'
    # @param id [String] An ID that uniquely identifies a video. The
    # [Video](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-video-api-v7-reference#video)
    # object's videoId field contains the ID that you set this parameter to. You
    # use this parameter to ensure that the specified video is the first video in
    # the list of videos that Bing returns.
    # @param length [VideoLength] Filter videos by the following lengths: Short:
    # Return videos that are less than 5 minutes. Medium: Return videos that are
    # between 5 and 20 minutes, inclusive. Long: Return videos that are longer than
    # 20 minutes. All: Do not filter by length.Specifying this value is the same as
    # not specifying the videoLength parameter. Possible values include: 'All',
    # 'Short', 'Medium', 'Long'
    # @param market [String] The market where the results come from. Typically, mkt
    # is the country where the user is making the request from. However, it could
    # be a different country if the user is not located in a country where Bing
    # delivers results. The market must be in the form <language code>-<country
    # code>. For example, en-US. The string is case insensitive. For a list of
    # possible market values, see [Market
    # Codes](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-video-api-v7-reference#market-codes).
    # NOTE: If known, you are encouraged to always specify the market. Specifying
    # the market helps Bing route the request and return an appropriate and optimal
    # response. If you specify a market that is not listed in [Market
    # Codes](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-video-api-v7-reference#market-codes),
    # Bing uses a best fit market code based on an internal mapping that is subject
    # to change. This parameter and the
    # [cc](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-video-api-v7-reference#cc)
    # query parameter are mutually exclusive—do not specify both.
    # @param offset [Integer] The zero-based offset that indicates the number of
    # videos to skip before returning videos. The default is 0. The offset should
    # be less than
    # ([totalEstimatedMatches](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-video-api-v7-reference#videos-totalmatches)
    # - count). Use this parameter along with the count parameter to page results.
    # For example, if your user interface displays 20 videos per page, set count to
    # 20 and offset to 0 to get the first page of results. For each subsequent
    # page, increment offset by 20 (for example, 0, 20, 40). It is possible for
    # multiple pages to include some overlap in results. To prevent duplicates, see
    # [nextOffset](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-video-api-v7-reference#videos-nextoffset).
    # Use this parameter only with the Video Search API.
    # @param pricing [VideoPricing] Filter videos by the following pricing options:
    # Free: Return videos that are free to view. Paid: Return videos that require a
    # subscription or payment to view. All: Do not filter by pricing.Specifying
    # this value is the same as not specifying the pricing parameter. Possible
    # values include: 'All', 'Free', 'Paid'
    # @param resolution [VideoResolution] Filter videos by the following
    # resolutions: SD480p: Return videos with a 480p or higher resolution. HD720p:
    # Return videos with a 720p or higher resolution. HD1080p: Return videos with a
    # 1080p or higher resolution. All: Do not filter by resolution.Specifying this
    # value is the same as not specifying the resolution parameter. Possible values
    # include: 'All', 'SD480p', 'HD720p', 'HD1080p'
    # @param safe_search [SafeSearch] Filter videos for adult content. The
    # following are the possible filter values. Off: If the request is through the
    # Video Search API, the response includes adult videos and the thumbnail images
    # of the videos are clear (non-fuzzy). If the request is through the Web Search
    # API, the response includes adult videos but the thumbnail images of the
    # videos are pixelated (fuzzy). Moderate: If the request is through the Video
    # Search API, the response does not include videos with adult content. If the
    # request is through the Web Search API, the response may include videos with
    # adult content but the thumbnail images of the videos are pixelated (fuzzy).
    # Strict: Does not return videos with adult content. The default is Moderate.
    # If the request comes from a market that Bing's adult policy requires that
    # safeSearch is set to Strict, Bing ignores the safeSearch value and uses
    # Strict. If you use the site: query operator, there is the chance that the
    # response may contain adult content regardless of what the safeSearch query
    # parameter is set to. Use site: only if you are aware of the content on the
    # site and your scenario supports the possibility of adult content. Possible
    # values include: 'Off', 'Moderate', 'Strict'
    # @param set_lang [String] The language to use for user interface strings.
    # Specify the language using the ISO 639-1 2-letter language code. For example,
    # the language code for English is EN. The default is EN (English). Although
    # optional, you should always specify the language. Typically, you set setLang
    # to the same language specified by mkt unless the user wants the user
    # interface strings displayed in a different language. This parameter and the
    # [Accept-Language](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-video-api-v7-reference#acceptlanguage)
    # header are mutually exclusive; do not specify both. A user interface string
    # is a string that's used as a label in a user interface. There are few user
    # interface strings in the JSON response objects. Also, any links to Bing.com
    # properties in the response objects apply the specified language.
    # @param text_decorations [Boolean] A Boolean value that determines whether
    # display strings contain decoration markers such as hit highlighting
    # characters. If true, the strings may include markers. The default is false.
    # To specify whether to use Unicode characters or HTML tags as the markers, see
    # the
    # [textFormat](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-video-api-v7-reference#textformat)
    # query parameter. For information about hit highlighting, see [Hit
    # Highlighting](https://docs.microsoft.com/azure/cognitive-services/bing-news-search/hit-highlighting).
    # @param text_format [TextFormat] The type of markers to use for text
    # decorations (see the textDecorations query parameter). Possible values are
    # Raw—Use Unicode characters to mark content that needs special formatting. The
    # Unicode characters are in the range E000 through E019. For example, Bing uses
    # E000 and E001 to mark the beginning and end of query terms for hit
    # highlighting. HTML—Use HTML tags to mark content that needs special
    # formatting. For example, use <b> tags to highlight query terms in display
    # strings. The default is Raw. For display strings that contain escapable HTML
    # characters such as <, >, and &, if textFormat is set to HTML, Bing escapes
    # the characters as appropriate (for example, < is escaped to &lt;). Possible
    # values include: 'Raw', 'Html'
    # @param custom_headers [Hash{String => String}] A hash of custom headers that
    # will be added to the HTTP request.
    #
    # @return [Videos] operation results.
    #
    def search(query, accept_language:nil, user_agent:nil, client_id:nil, client_ip:nil, location:nil, country_code:nil, count:nil, freshness:nil, id:nil, length:nil, market:nil, offset:nil, pricing:nil, resolution:nil, safe_search:nil, set_lang:nil, text_decorations:nil, text_format:nil, custom_headers:nil)
      response = search_async(query, accept_language:accept_language, user_agent:user_agent, client_id:client_id, client_ip:client_ip, location:location, country_code:country_code, count:count, freshness:freshness, id:id, length:length, market:market, offset:offset, pricing:pricing, resolution:resolution, safe_search:safe_search, set_lang:set_lang, text_decorations:text_decorations, text_format:text_format, custom_headers:custom_headers).value!
      response.body unless response.nil?
    end

    #
    # The Video Search API lets you send a search query to Bing and get back a list
    # of videos that are relevant to the search query. This section provides
    # technical details about the query parameters and headers that you use to
    # request videos and the JSON response objects that contain them. For examples
    # that show how to make requests, see [Searching the Web for
    # Videos](https://docs.microsoft.com/azure/cognitive-services/bing-video-search/search-the-web).
    #
    # @param query [String] The user's search query string. The query string cannot
    # be empty. The query string may contain [Bing Advanced
    # Operators](http://msdn.microsoft.com/library/ff795620.aspx). For example, to
    # limit videos to a specific domain, use the
    # [site:](http://msdn.microsoft.com/library/ff795613.aspx) operator. Use this
    # parameter only with the Video Search API. Do not specify this parameter when
    # calling the Trending Videos API.
    # @param accept_language [String] A comma-delimited list of one or more
    # languages to use for user interface strings. The list is in decreasing order
    # of preference. For additional information, including expected format, see
    # [RFC2616](http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html). This
    # header and the
    # [setLang](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-video-api-v7-reference#setlang)
    # query parameter are mutually exclusive; do not specify both. If you set this
    # header, you must also specify the
    # [cc](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-video-api-v7-reference#cc)
    # query parameter. To determine the market to return results for, Bing uses the
    # first supported language it finds from the list and combines it with the cc
    # parameter value. If the list does not include a supported language, Bing
    # finds the closest language and market that supports the request or it uses an
    # aggregated or default market for the results. To determine the market that
    # Bing used, see the BingAPIs-Market header. Use this header and the cc query
    # parameter only if you specify multiple languages. Otherwise, use the
    # [mkt](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-video-api-v7-reference#mkt)
    # and
    # [setLang](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-video-api-v7-reference#setlang)
    # query parameters. A user interface string is a string that's used as a label
    # in a user interface. There are few user interface strings in the JSON
    # response objects. Any links to Bing.com properties in the response objects
    # apply the specified language.
    # @param user_agent [String] The user agent originating the request. Bing uses
    # the user agent to provide mobile users with an optimized experience. Although
    # optional, you are encouraged to always specify this header. The user-agent
    # should be the same string that any commonly used browser sends. For
    # information about user agents, see [RFC
    # 2616](http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html). The following
    # are examples of user-agent strings. Windows Phone: Mozilla/5.0 (compatible;
    # MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA;
    # Lumia 822). Android: Mozilla / 5.0 (Linux; U; Android 2.3.5; en - us; SCH -
    # I500 Build / GINGERBREAD) AppleWebKit / 533.1 (KHTML; like Gecko) Version /
    # 4.0 Mobile Safari / 533.1. iPhone: Mozilla / 5.0 (iPhone; CPU iPhone OS 6_1
    # like Mac OS X) AppleWebKit / 536.26 (KHTML; like Gecko) Mobile / 10B142
    # iPhone4; 1 BingWeb / 3.03.1428.20120423. PC: Mozilla / 5.0 (Windows NT 6.3;
    # WOW64; Trident / 7.0; Touch; rv:11.0) like Gecko. iPad: Mozilla / 5.0 (iPad;
    # CPU OS 7_0 like Mac OS X) AppleWebKit / 537.51.1 (KHTML, like Gecko) Version
    # / 7.0 Mobile / 11A465 Safari / 9537.53
    # @param client_id [String] Bing uses this header to provide users with
    # consistent behavior across Bing API calls. Bing often flights new features
    # and improvements, and it uses the client ID as a key for assigning traffic on
    # different flights. If you do not use the same client ID for a user across
    # multiple requests, then Bing may assign the user to multiple conflicting
    # flights. Being assigned to multiple conflicting flights can lead to an
    # inconsistent user experience. For example, if the second request has a
    # different flight assignment than the first, the experience may be unexpected.
    # Also, Bing can use the client ID to tailor web results to that client ID’s
    # search history, providing a richer experience for the user. Bing also uses
    # this header to help improve result rankings by analyzing the activity
    # generated by a client ID. The relevance improvements help with better quality
    # of results delivered by Bing APIs and in turn enables higher click-through
    # rates for the API consumer. IMPORTANT: Although optional, you should consider
    # this header required. Persisting the client ID across multiple requests for
    # the same end user and device combination enables 1) the API consumer to
    # receive a consistent user experience, and 2) higher click-through rates via
    # better quality of results from the Bing APIs. Each user that uses your
    # application on the device must have a unique, Bing generated client ID. If
    # you do not include this header in the request, Bing generates an ID and
    # returns it in the X-MSEdge-ClientID response header. The only time that you
    # should NOT include this header in a request is the first time the user uses
    # your app on that device. Use the client ID for each Bing API request that
    # your app makes for this user on the device. Persist the client ID. To persist
    # the ID in a browser app, use a persistent HTTP cookie to ensure the ID is
    # used across all sessions. Do not use a session cookie. For other apps such as
    # mobile apps, use the device's persistent storage to persist the ID. The next
    # time the user uses your app on that device, get the client ID that you
    # persisted. Bing responses may or may not include this header. If the response
    # includes this header, capture the client ID and use it for all subsequent
    # Bing requests for the user on that device. If you include the
    # X-MSEdge-ClientID, you must not include cookies in the request.
    # @param client_ip [String] The IPv4 or IPv6 address of the client device. The
    # IP address is used to discover the user's location. Bing uses the location
    # information to determine safe search behavior. Although optional, you are
    # encouraged to always specify this header and the X-Search-Location header. Do
    # not obfuscate the address (for example, by changing the last octet to 0).
    # Obfuscating the address results in the location not being anywhere near the
    # device's actual location, which may result in Bing serving erroneous results.
    # @param location [String] A semicolon-delimited list of key/value pairs that
    # describe the client's geographical location. Bing uses the location
    # information to determine safe search behavior and to return relevant local
    # content. Specify the key/value pair as <key>:<value>. The following are the
    # keys that you use to specify the user's location. lat (required): The
    # latitude of the client's location, in degrees. The latitude must be greater
    # than or equal to -90.0 and less than or equal to +90.0. Negative values
    # indicate southern latitudes and positive values indicate northern latitudes.
    # long (required): The longitude of the client's location, in degrees. The
    # longitude must be greater than or equal to -180.0 and less than or equal to
    # +180.0. Negative values indicate western longitudes and positive values
    # indicate eastern longitudes. re (required): The radius, in meters, which
    # specifies the horizontal accuracy of the coordinates. Pass the value returned
    # by the device's location service. Typical values might be 22m for GPS/Wi-Fi,
    # 380m for cell tower triangulation, and 18,000m for reverse IP lookup. ts
    # (optional): The UTC UNIX timestamp of when the client was at the location.
    # (The UNIX timestamp is the number of seconds since January 1, 1970.) head
    # (optional): The client's relative heading or direction of travel. Specify the
    # direction of travel as degrees from 0 through 360, counting clockwise
    # relative to true north. Specify this key only if the sp key is nonzero. sp
    # (optional): The horizontal velocity (speed), in meters per second, that the
    # client device is traveling. alt (optional): The altitude of the client
    # device, in meters. are (optional): The radius, in meters, that specifies the
    # vertical accuracy of the coordinates. Specify this key only if you specify
    # the alt key. Although many of the keys are optional, the more information
    # that you provide, the more accurate the location results are. Although
    # optional, you are encouraged to always specify the user's geographical
    # location. Providing the location is especially important if the client's IP
    # address does not accurately reflect the user's physical location (for
    # example, if the client uses VPN). For optimal results, you should include
    # this header and the X-MSEdge-ClientIP header, but at a minimum, you should
    # include this header.
    # @param country_code [String] A 2-character country code of the country where
    # the results come from. This API supports only the United States market. If
    # you specify this query parameter, it must be set to us. If you set this
    # parameter, you must also specify the Accept-Language header. Bing uses the
    # first supported language it finds from the languages list, and combine that
    # language with the country code that you specify to determine the market to
    # return results for. If the languages list does not include a supported
    # language, Bing finds the closest language and market that supports the
    # request, or it may use an aggregated or default market for the results
    # instead of a specified one. You should use this query parameter and the
    # Accept-Language query parameter only if you specify multiple languages;
    # otherwise, you should use the mkt and setLang query parameters. This
    # parameter and the mkt query parameter are mutually exclusive—do not specify
    # both.
    # @param count [Integer] The number of videos to return in the response. The
    # actual number delivered may be less than requested. The default is 35. The
    # maximum is 105. You may use this parameter along with the offset parameter to
    # page results. For example, if your user interface presents 20 videos per
    # page, set count to 20 and offset to 0 to get the first page of results. For
    # each subsequent page, increment offset by 20 (for example, 0, 20, 40). Use
    # this parameter only with the Video Search API. Do not specify this parameter
    # when calling the Trending Videos API or the Web Search API.
    # @param freshness [Freshness] Filter videos by the date and time that Bing
    # discovered the video. The following are the possible filter values. Day:
    # Return videos discovered within the last 24 hours. Week: Return videos
    # discovered within the last 7 days. Month: Return videos discovered within the
    # last 30 days. Possible values include: 'Day', 'Week', 'Month'
    # @param id [String] An ID that uniquely identifies a video. The
    # [Video](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-video-api-v7-reference#video)
    # object's videoId field contains the ID that you set this parameter to. You
    # use this parameter to ensure that the specified video is the first video in
    # the list of videos that Bing returns.
    # @param length [VideoLength] Filter videos by the following lengths: Short:
    # Return videos that are less than 5 minutes. Medium: Return videos that are
    # between 5 and 20 minutes, inclusive. Long: Return videos that are longer than
    # 20 minutes. All: Do not filter by length.Specifying this value is the same as
    # not specifying the videoLength parameter. Possible values include: 'All',
    # 'Short', 'Medium', 'Long'
    # @param market [String] The market where the results come from. Typically, mkt
    # is the country where the user is making the request from. However, it could
    # be a different country if the user is not located in a country where Bing
    # delivers results. The market must be in the form <language code>-<country
    # code>. For example, en-US. The string is case insensitive. For a list of
    # possible market values, see [Market
    # Codes](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-video-api-v7-reference#market-codes).
    # NOTE: If known, you are encouraged to always specify the market. Specifying
    # the market helps Bing route the request and return an appropriate and optimal
    # response. If you specify a market that is not listed in [Market
    # Codes](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-video-api-v7-reference#market-codes),
    # Bing uses a best fit market code based on an internal mapping that is subject
    # to change. This parameter and the
    # [cc](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-video-api-v7-reference#cc)
    # query parameter are mutually exclusive—do not specify both.
    # @param offset [Integer] The zero-based offset that indicates the number of
    # videos to skip before returning videos. The default is 0. The offset should
    # be less than
    # ([totalEstimatedMatches](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-video-api-v7-reference#videos-totalmatches)
    # - count). Use this parameter along with the count parameter to page results.
    # For example, if your user interface displays 20 videos per page, set count to
    # 20 and offset to 0 to get the first page of results. For each subsequent
    # page, increment offset by 20 (for example, 0, 20, 40). It is possible for
    # multiple pages to include some overlap in results. To prevent duplicates, see
    # [nextOffset](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-video-api-v7-reference#videos-nextoffset).
    # Use this parameter only with the Video Search API.
    # @param pricing [VideoPricing] Filter videos by the following pricing options:
    # Free: Return videos that are free to view. Paid: Return videos that require a
    # subscription or payment to view. All: Do not filter by pricing.Specifying
    # this value is the same as not specifying the pricing parameter. Possible
    # values include: 'All', 'Free', 'Paid'
    # @param resolution [VideoResolution] Filter videos by the following
    # resolutions: SD480p: Return videos with a 480p or higher resolution. HD720p:
    # Return videos with a 720p or higher resolution. HD1080p: Return videos with a
    # 1080p or higher resolution. All: Do not filter by resolution.Specifying this
    # value is the same as not specifying the resolution parameter. Possible values
    # include: 'All', 'SD480p', 'HD720p', 'HD1080p'
    # @param safe_search [SafeSearch] Filter videos for adult content. The
    # following are the possible filter values. Off: If the request is through the
    # Video Search API, the response includes adult videos and the thumbnail images
    # of the videos are clear (non-fuzzy). If the request is through the Web Search
    # API, the response includes adult videos but the thumbnail images of the
    # videos are pixelated (fuzzy). Moderate: If the request is through the Video
    # Search API, the response does not include videos with adult content. If the
    # request is through the Web Search API, the response may include videos with
    # adult content but the thumbnail images of the videos are pixelated (fuzzy).
    # Strict: Does not return videos with adult content. The default is Moderate.
    # If the request comes from a market that Bing's adult policy requires that
    # safeSearch is set to Strict, Bing ignores the safeSearch value and uses
    # Strict. If you use the site: query operator, there is the chance that the
    # response may contain adult content regardless of what the safeSearch query
    # parameter is set to. Use site: only if you are aware of the content on the
    # site and your scenario supports the possibility of adult content. Possible
    # values include: 'Off', 'Moderate', 'Strict'
    # @param set_lang [String] The language to use for user interface strings.
    # Specify the language using the ISO 639-1 2-letter language code. For example,
    # the language code for English is EN. The default is EN (English). Although
    # optional, you should always specify the language. Typically, you set setLang
    # to the same language specified by mkt unless the user wants the user
    # interface strings displayed in a different language. This parameter and the
    # [Accept-Language](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-video-api-v7-reference#acceptlanguage)
    # header are mutually exclusive; do not specify both. A user interface string
    # is a string that's used as a label in a user interface. There are few user
    # interface strings in the JSON response objects. Also, any links to Bing.com
    # properties in the response objects apply the specified language.
    # @param text_decorations [Boolean] A Boolean value that determines whether
    # display strings contain decoration markers such as hit highlighting
    # characters. If true, the strings may include markers. The default is false.
    # To specify whether to use Unicode characters or HTML tags as the markers, see
    # the
    # [textFormat](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-video-api-v7-reference#textformat)
    # query parameter. For information about hit highlighting, see [Hit
    # Highlighting](https://docs.microsoft.com/azure/cognitive-services/bing-news-search/hit-highlighting).
    # @param text_format [TextFormat] The type of markers to use for text
    # decorations (see the textDecorations query parameter). Possible values are
    # Raw—Use Unicode characters to mark content that needs special formatting. The
    # Unicode characters are in the range E000 through E019. For example, Bing uses
    # E000 and E001 to mark the beginning and end of query terms for hit
    # highlighting. HTML—Use HTML tags to mark content that needs special
    # formatting. For example, use <b> tags to highlight query terms in display
    # strings. The default is Raw. For display strings that contain escapable HTML
    # characters such as <, >, and &, if textFormat is set to HTML, Bing escapes
    # the characters as appropriate (for example, < is escaped to &lt;). Possible
    # values include: 'Raw', 'Html'
    # @param custom_headers [Hash{String => String}] A hash of custom headers that
    # will be added to the HTTP request.
    #
    # @return [MsRestAzure::AzureOperationResponse] HTTP response information.
    #
    def search_with_http_info(query, accept_language:nil, user_agent:nil, client_id:nil, client_ip:nil, location:nil, country_code:nil, count:nil, freshness:nil, id:nil, length:nil, market:nil, offset:nil, pricing:nil, resolution:nil, safe_search:nil, set_lang:nil, text_decorations:nil, text_format:nil, custom_headers:nil)
      search_async(query, accept_language:accept_language, user_agent:user_agent, client_id:client_id, client_ip:client_ip, location:location, country_code:country_code, count:count, freshness:freshness, id:id, length:length, market:market, offset:offset, pricing:pricing, resolution:resolution, safe_search:safe_search, set_lang:set_lang, text_decorations:text_decorations, text_format:text_format, custom_headers:custom_headers).value!
    end

    #
    # The Video Search API lets you send a search query to Bing and get back a list
    # of videos that are relevant to the search query. This section provides
    # technical details about the query parameters and headers that you use to
    # request videos and the JSON response objects that contain them. For examples
    # that show how to make requests, see [Searching the Web for
    # Videos](https://docs.microsoft.com/azure/cognitive-services/bing-video-search/search-the-web).
    #
    # @param query [String] The user's search query string. The query string cannot
    # be empty. The query string may contain [Bing Advanced
    # Operators](http://msdn.microsoft.com/library/ff795620.aspx). For example, to
    # limit videos to a specific domain, use the
    # [site:](http://msdn.microsoft.com/library/ff795613.aspx) operator. Use this
    # parameter only with the Video Search API. Do not specify this parameter when
    # calling the Trending Videos API.
    # @param accept_language [String] A comma-delimited list of one or more
    # languages to use for user interface strings. The list is in decreasing order
    # of preference. For additional information, including expected format, see
    # [RFC2616](http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html). This
    # header and the
    # [setLang](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-video-api-v7-reference#setlang)
    # query parameter are mutually exclusive; do not specify both. If you set this
    # header, you must also specify the
    # [cc](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-video-api-v7-reference#cc)
    # query parameter. To determine the market to return results for, Bing uses the
    # first supported language it finds from the list and combines it with the cc
    # parameter value. If the list does not include a supported language, Bing
    # finds the closest language and market that supports the request or it uses an
    # aggregated or default market for the results. To determine the market that
    # Bing used, see the BingAPIs-Market header. Use this header and the cc query
    # parameter only if you specify multiple languages. Otherwise, use the
    # [mkt](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-video-api-v7-reference#mkt)
    # and
    # [setLang](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-video-api-v7-reference#setlang)
    # query parameters. A user interface string is a string that's used as a label
    # in a user interface. There are few user interface strings in the JSON
    # response objects. Any links to Bing.com properties in the response objects
    # apply the specified language.
    # @param user_agent [String] The user agent originating the request. Bing uses
    # the user agent to provide mobile users with an optimized experience. Although
    # optional, you are encouraged to always specify this header. The user-agent
    # should be the same string that any commonly used browser sends. For
    # information about user agents, see [RFC
    # 2616](http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html). The following
    # are examples of user-agent strings. Windows Phone: Mozilla/5.0 (compatible;
    # MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA;
    # Lumia 822). Android: Mozilla / 5.0 (Linux; U; Android 2.3.5; en - us; SCH -
    # I500 Build / GINGERBREAD) AppleWebKit / 533.1 (KHTML; like Gecko) Version /
    # 4.0 Mobile Safari / 533.1. iPhone: Mozilla / 5.0 (iPhone; CPU iPhone OS 6_1
    # like Mac OS X) AppleWebKit / 536.26 (KHTML; like Gecko) Mobile / 10B142
    # iPhone4; 1 BingWeb / 3.03.1428.20120423. PC: Mozilla / 5.0 (Windows NT 6.3;
    # WOW64; Trident / 7.0; Touch; rv:11.0) like Gecko. iPad: Mozilla / 5.0 (iPad;
    # CPU OS 7_0 like Mac OS X) AppleWebKit / 537.51.1 (KHTML, like Gecko) Version
    # / 7.0 Mobile / 11A465 Safari / 9537.53
    # @param client_id [String] Bing uses this header to provide users with
    # consistent behavior across Bing API calls. Bing often flights new features
    # and improvements, and it uses the client ID as a key for assigning traffic on
    # different flights. If you do not use the same client ID for a user across
    # multiple requests, then Bing may assign the user to multiple conflicting
    # flights. Being assigned to multiple conflicting flights can lead to an
    # inconsistent user experience. For example, if the second request has a
    # different flight assignment than the first, the experience may be unexpected.
    # Also, Bing can use the client ID to tailor web results to that client ID’s
    # search history, providing a richer experience for the user. Bing also uses
    # this header to help improve result rankings by analyzing the activity
    # generated by a client ID. The relevance improvements help with better quality
    # of results delivered by Bing APIs and in turn enables higher click-through
    # rates for the API consumer. IMPORTANT: Although optional, you should consider
    # this header required. Persisting the client ID across multiple requests for
    # the same end user and device combination enables 1) the API consumer to
    # receive a consistent user experience, and 2) higher click-through rates via
    # better quality of results from the Bing APIs. Each user that uses your
    # application on the device must have a unique, Bing generated client ID. If
    # you do not include this header in the request, Bing generates an ID and
    # returns it in the X-MSEdge-ClientID response header. The only time that you
    # should NOT include this header in a request is the first time the user uses
    # your app on that device. Use the client ID for each Bing API request that
    # your app makes for this user on the device. Persist the client ID. To persist
    # the ID in a browser app, use a persistent HTTP cookie to ensure the ID is
    # used across all sessions. Do not use a session cookie. For other apps such as
    # mobile apps, use the device's persistent storage to persist the ID. The next
    # time the user uses your app on that device, get the client ID that you
    # persisted. Bing responses may or may not include this header. If the response
    # includes this header, capture the client ID and use it for all subsequent
    # Bing requests for the user on that device. If you include the
    # X-MSEdge-ClientID, you must not include cookies in the request.
    # @param client_ip [String] The IPv4 or IPv6 address of the client device. The
    # IP address is used to discover the user's location. Bing uses the location
    # information to determine safe search behavior. Although optional, you are
    # encouraged to always specify this header and the X-Search-Location header. Do
    # not obfuscate the address (for example, by changing the last octet to 0).
    # Obfuscating the address results in the location not being anywhere near the
    # device's actual location, which may result in Bing serving erroneous results.
    # @param location [String] A semicolon-delimited list of key/value pairs that
    # describe the client's geographical location. Bing uses the location
    # information to determine safe search behavior and to return relevant local
    # content. Specify the key/value pair as <key>:<value>. The following are the
    # keys that you use to specify the user's location. lat (required): The
    # latitude of the client's location, in degrees. The latitude must be greater
    # than or equal to -90.0 and less than or equal to +90.0. Negative values
    # indicate southern latitudes and positive values indicate northern latitudes.
    # long (required): The longitude of the client's location, in degrees. The
    # longitude must be greater than or equal to -180.0 and less than or equal to
    # +180.0. Negative values indicate western longitudes and positive values
    # indicate eastern longitudes. re (required): The radius, in meters, which
    # specifies the horizontal accuracy of the coordinates. Pass the value returned
    # by the device's location service. Typical values might be 22m for GPS/Wi-Fi,
    # 380m for cell tower triangulation, and 18,000m for reverse IP lookup. ts
    # (optional): The UTC UNIX timestamp of when the client was at the location.
    # (The UNIX timestamp is the number of seconds since January 1, 1970.) head
    # (optional): The client's relative heading or direction of travel. Specify the
    # direction of travel as degrees from 0 through 360, counting clockwise
    # relative to true north. Specify this key only if the sp key is nonzero. sp
    # (optional): The horizontal velocity (speed), in meters per second, that the
    # client device is traveling. alt (optional): The altitude of the client
    # device, in meters. are (optional): The radius, in meters, that specifies the
    # vertical accuracy of the coordinates. Specify this key only if you specify
    # the alt key. Although many of the keys are optional, the more information
    # that you provide, the more accurate the location results are. Although
    # optional, you are encouraged to always specify the user's geographical
    # location. Providing the location is especially important if the client's IP
    # address does not accurately reflect the user's physical location (for
    # example, if the client uses VPN). For optimal results, you should include
    # this header and the X-MSEdge-ClientIP header, but at a minimum, you should
    # include this header.
    # @param country_code [String] A 2-character country code of the country where
    # the results come from. This API supports only the United States market. If
    # you specify this query parameter, it must be set to us. If you set this
    # parameter, you must also specify the Accept-Language header. Bing uses the
    # first supported language it finds from the languages list, and combine that
    # language with the country code that you specify to determine the market to
    # return results for. If the languages list does not include a supported
    # language, Bing finds the closest language and market that supports the
    # request, or it may use an aggregated or default market for the results
    # instead of a specified one. You should use this query parameter and the
    # Accept-Language query parameter only if you specify multiple languages;
    # otherwise, you should use the mkt and setLang query parameters. This
    # parameter and the mkt query parameter are mutually exclusive—do not specify
    # both.
    # @param count [Integer] The number of videos to return in the response. The
    # actual number delivered may be less than requested. The default is 35. The
    # maximum is 105. You may use this parameter along with the offset parameter to
    # page results. For example, if your user interface presents 20 videos per
    # page, set count to 20 and offset to 0 to get the first page of results. For
    # each subsequent page, increment offset by 20 (for example, 0, 20, 40). Use
    # this parameter only with the Video Search API. Do not specify this parameter
    # when calling the Trending Videos API or the Web Search API.
    # @param freshness [Freshness] Filter videos by the date and time that Bing
    # discovered the video. The following are the possible filter values. Day:
    # Return videos discovered within the last 24 hours. Week: Return videos
    # discovered within the last 7 days. Month: Return videos discovered within the
    # last 30 days. Possible values include: 'Day', 'Week', 'Month'
    # @param id [String] An ID that uniquely identifies a video. The
    # [Video](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-video-api-v7-reference#video)
    # object's videoId field contains the ID that you set this parameter to. You
    # use this parameter to ensure that the specified video is the first video in
    # the list of videos that Bing returns.
    # @param length [VideoLength] Filter videos by the following lengths: Short:
    # Return videos that are less than 5 minutes. Medium: Return videos that are
    # between 5 and 20 minutes, inclusive. Long: Return videos that are longer than
    # 20 minutes. All: Do not filter by length.Specifying this value is the same as
    # not specifying the videoLength parameter. Possible values include: 'All',
    # 'Short', 'Medium', 'Long'
    # @param market [String] The market where the results come from. Typically, mkt
    # is the country where the user is making the request from. However, it could
    # be a different country if the user is not located in a country where Bing
    # delivers results. The market must be in the form <language code>-<country
    # code>. For example, en-US. The string is case insensitive. For a list of
    # possible market values, see [Market
    # Codes](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-video-api-v7-reference#market-codes).
    # NOTE: If known, you are encouraged to always specify the market. Specifying
    # the market helps Bing route the request and return an appropriate and optimal
    # response. If you specify a market that is not listed in [Market
    # Codes](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-video-api-v7-reference#market-codes),
    # Bing uses a best fit market code based on an internal mapping that is subject
    # to change. This parameter and the
    # [cc](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-video-api-v7-reference#cc)
    # query parameter are mutually exclusive—do not specify both.
    # @param offset [Integer] The zero-based offset that indicates the number of
    # videos to skip before returning videos. The default is 0. The offset should
    # be less than
    # ([totalEstimatedMatches](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-video-api-v7-reference#videos-totalmatches)
    # - count). Use this parameter along with the count parameter to page results.
    # For example, if your user interface displays 20 videos per page, set count to
    # 20 and offset to 0 to get the first page of results. For each subsequent
    # page, increment offset by 20 (for example, 0, 20, 40). It is possible for
    # multiple pages to include some overlap in results. To prevent duplicates, see
    # [nextOffset](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-video-api-v7-reference#videos-nextoffset).
    # Use this parameter only with the Video Search API.
    # @param pricing [VideoPricing] Filter videos by the following pricing options:
    # Free: Return videos that are free to view. Paid: Return videos that require a
    # subscription or payment to view. All: Do not filter by pricing.Specifying
    # this value is the same as not specifying the pricing parameter. Possible
    # values include: 'All', 'Free', 'Paid'
    # @param resolution [VideoResolution] Filter videos by the following
    # resolutions: SD480p: Return videos with a 480p or higher resolution. HD720p:
    # Return videos with a 720p or higher resolution. HD1080p: Return videos with a
    # 1080p or higher resolution. All: Do not filter by resolution.Specifying this
    # value is the same as not specifying the resolution parameter. Possible values
    # include: 'All', 'SD480p', 'HD720p', 'HD1080p'
    # @param safe_search [SafeSearch] Filter videos for adult content. The
    # following are the possible filter values. Off: If the request is through the
    # Video Search API, the response includes adult videos and the thumbnail images
    # of the videos are clear (non-fuzzy). If the request is through the Web Search
    # API, the response includes adult videos but the thumbnail images of the
    # videos are pixelated (fuzzy). Moderate: If the request is through the Video
    # Search API, the response does not include videos with adult content. If the
    # request is through the Web Search API, the response may include videos with
    # adult content but the thumbnail images of the videos are pixelated (fuzzy).
    # Strict: Does not return videos with adult content. The default is Moderate.
    # If the request comes from a market that Bing's adult policy requires that
    # safeSearch is set to Strict, Bing ignores the safeSearch value and uses
    # Strict. If you use the site: query operator, there is the chance that the
    # response may contain adult content regardless of what the safeSearch query
    # parameter is set to. Use site: only if you are aware of the content on the
    # site and your scenario supports the possibility of adult content. Possible
    # values include: 'Off', 'Moderate', 'Strict'
    # @param set_lang [String] The language to use for user interface strings.
    # Specify the language using the ISO 639-1 2-letter language code. For example,
    # the language code for English is EN. The default is EN (English). Although
    # optional, you should always specify the language. Typically, you set setLang
    # to the same language specified by mkt unless the user wants the user
    # interface strings displayed in a different language. This parameter and the
    # [Accept-Language](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-video-api-v7-reference#acceptlanguage)
    # header are mutually exclusive; do not specify both. A user interface string
    # is a string that's used as a label in a user interface. There are few user
    # interface strings in the JSON response objects. Also, any links to Bing.com
    # properties in the response objects apply the specified language.
    # @param text_decorations [Boolean] A Boolean value that determines whether
    # display strings contain decoration markers such as hit highlighting
    # characters. If true, the strings may include markers. The default is false.
    # To specify whether to use Unicode characters or HTML tags as the markers, see
    # the
    # [textFormat](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-video-api-v7-reference#textformat)
    # query parameter. For information about hit highlighting, see [Hit
    # Highlighting](https://docs.microsoft.com/azure/cognitive-services/bing-news-search/hit-highlighting).
    # @param text_format [TextFormat] The type of markers to use for text
    # decorations (see the textDecorations query parameter). Possible values are
    # Raw—Use Unicode characters to mark content that needs special formatting. The
    # Unicode characters are in the range E000 through E019. For example, Bing uses
    # E000 and E001 to mark the beginning and end of query terms for hit
    # highlighting. HTML—Use HTML tags to mark content that needs special
    # formatting. For example, use <b> tags to highlight query terms in display
    # strings. The default is Raw. For display strings that contain escapable HTML
    # characters such as <, >, and &, if textFormat is set to HTML, Bing escapes
    # the characters as appropriate (for example, < is escaped to &lt;). Possible
    # values include: 'Raw', 'Html'
    # @param [Hash{String => String}] A hash of custom headers that will be added
    # to the HTTP request.
    #
    # @return [Concurrent::Promise] Promise object which holds the HTTP response.
    #
    def search_async(query, accept_language:nil, user_agent:nil, client_id:nil, client_ip:nil, location:nil, country_code:nil, count:nil, freshness:nil, id:nil, length:nil, market:nil, offset:nil, pricing:nil, resolution:nil, safe_search:nil, set_lang:nil, text_decorations:nil, text_format:nil, custom_headers:nil)
      fail ArgumentError, '@client.endpoint is nil' if @client.endpoint.nil?
      x_bing_apis_sdk = 'true'
      fail ArgumentError, 'query is nil' if query.nil?


      request_headers = {}
      request_headers['Content-Type'] = 'application/json; charset=utf-8'

      # Set Headers
      request_headers['x-ms-client-request-id'] = SecureRandom.uuid
      request_headers['X-BingApis-SDK'] = x_bing_apis_sdk unless x_bing_apis_sdk.nil?
      request_headers['Accept-Language'] = accept_language unless accept_language.nil?
      request_headers['User-Agent'] = user_agent unless user_agent.nil?
      request_headers['X-MSEdge-ClientID'] = client_id unless client_id.nil?
      request_headers['X-MSEdge-ClientIP'] = client_ip unless client_ip.nil?
      request_headers['X-Search-Location'] = location unless location.nil?
      path_template = 'videos/search'

      request_url = @base_url || @client.base_url
    request_url = request_url.gsub('{Endpoint}', @client.endpoint)

      options = {
          middlewares: [[MsRest::RetryPolicyMiddleware, times: 3, retry: 0.02], [:cookie_jar]],
          query_params: {'cc' => country_code,'count' => count,'freshness' => freshness,'id' => id,'length' => length,'mkt' => market,'offset' => offset,'pricing' => pricing,'q' => query,'resolution' => resolution,'safeSearch' => safe_search,'setLang' => set_lang,'textDecorations' => text_decorations,'textFormat' => text_format},
          headers: request_headers.merge(custom_headers || {}),
          base_url: request_url
      }
      promise = @client.make_request_async(:get, path_template, options)

      promise = promise.then do |result|
        http_response = result.response
        status_code = http_response.status
        response_content = http_response.body
        unless status_code == 200
          error_model = JSON.load(response_content)
          fail MsRest::HttpOperationError.new(result.request, http_response, error_model)
        end

        result.request_id = http_response['x-ms-request-id'] unless http_response['x-ms-request-id'].nil?
        # Deserialize Response
        if status_code == 200
          begin
            parsed_response = response_content.to_s.empty? ? nil : JSON.load(response_content)
            result_mapper = Azure::CognitiveServices::VideoSearch::V1_0::Models::Videos.mapper()
            result.body = @client.deserialize(result_mapper, parsed_response)
          rescue Exception => e
            fail MsRest::DeserializationError.new('Error occurred in deserializing the response', e.message, e.backtrace, result)
          end
        end

        result
      end

      promise.execute
    end

    #
    # The Video Detail Search API lets you search on Bing and get back insights
    # about a video, such as related videos. This section provides technical
    # details about the query parameters and headers that you use to request
    # insights of videos and the JSON response objects that contain them. For
    # examples that show how to make requests, see [Searching the Web for
    # Videos](https://docs.microsoft.com/azure/cognitive-services/bing-video-search/search-the-web).
    #
    # @param query [String] The user's search query string. The query string cannot
    # be empty. The query string may contain [Bing Advanced
    # Operators](http://msdn.microsoft.com/library/ff795620.aspx). For example, to
    # limit videos to a specific domain, use the
    # [site:](http://msdn.microsoft.com/library/ff795613.aspx) operator. Use this
    # parameter only with the Video Search API. Do not specify this parameter when
    # calling the Trending Videos API.
    # @param accept_language [String] A comma-delimited list of one or more
    # languages to use for user interface strings. The list is in decreasing order
    # of preference. For additional information, including expected format, see
    # [RFC2616](http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html). This
    # header and the
    # [setLang](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-video-api-v7-reference#setlang)
    # query parameter are mutually exclusive; do not specify both. If you set this
    # header, you must also specify the
    # [cc](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-video-api-v7-reference#cc)
    # query parameter. To determine the market to return results for, Bing uses the
    # first supported language it finds from the list and combines it with the cc
    # parameter value. If the list does not include a supported language, Bing
    # finds the closest language and market that supports the request or it uses an
    # aggregated or default market for the results. To determine the market that
    # Bing used, see the BingAPIs-Market header. Use this header and the cc query
    # parameter only if you specify multiple languages. Otherwise, use the
    # [mkt](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-video-api-v7-reference#mkt)
    # and
    # [setLang](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-video-api-v7-reference#setlang)
    # query parameters. A user interface string is a string that's used as a label
    # in a user interface. There are few user interface strings in the JSON
    # response objects. Any links to Bing.com properties in the response objects
    # apply the specified language.
    # @param user_agent [String] The user agent originating the request. Bing uses
    # the user agent to provide mobile users with an optimized experience. Although
    # optional, you are encouraged to always specify this header. The user-agent
    # should be the same string that any commonly used browser sends. For
    # information about user agents, see [RFC
    # 2616](http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html). The following
    # are examples of user-agent strings. Windows Phone: Mozilla/5.0 (compatible;
    # MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA;
    # Lumia 822). Android: Mozilla / 5.0 (Linux; U; Android 2.3.5; en - us; SCH -
    # I500 Build / GINGERBREAD) AppleWebKit / 533.1 (KHTML; like Gecko) Version /
    # 4.0 Mobile Safari / 533.1. iPhone: Mozilla / 5.0 (iPhone; CPU iPhone OS 6_1
    # like Mac OS X) AppleWebKit / 536.26 (KHTML; like Gecko) Mobile / 10B142
    # iPhone4; 1 BingWeb / 3.03.1428.20120423. PC: Mozilla / 5.0 (Windows NT 6.3;
    # WOW64; Trident / 7.0; Touch; rv:11.0) like Gecko. iPad: Mozilla / 5.0 (iPad;
    # CPU OS 7_0 like Mac OS X) AppleWebKit / 537.51.1 (KHTML, like Gecko) Version
    # / 7.0 Mobile / 11A465 Safari / 9537.53
    # @param client_id [String] Bing uses this header to provide users with
    # consistent behavior across Bing API calls. Bing often flights new features
    # and improvements, and it uses the client ID as a key for assigning traffic on
    # different flights. If you do not use the same client ID for a user across
    # multiple requests, then Bing may assign the user to multiple conflicting
    # flights. Being assigned to multiple conflicting flights can lead to an
    # inconsistent user experience. For example, if the second request has a
    # different flight assignment than the first, the experience may be unexpected.
    # Also, Bing can use the client ID to tailor web results to that client ID’s
    # search history, providing a richer experience for the user. Bing also uses
    # this header to help improve result rankings by analyzing the activity
    # generated by a client ID. The relevance improvements help with better quality
    # of results delivered by Bing APIs and in turn enables higher click-through
    # rates for the API consumer. IMPORTANT: Although optional, you should consider
    # this header required. Persisting the client ID across multiple requests for
    # the same end user and device combination enables 1) the API consumer to
    # receive a consistent user experience, and 2) higher click-through rates via
    # better quality of results from the Bing APIs. Each user that uses your
    # application on the device must have a unique, Bing generated client ID. If
    # you do not include this header in the request, Bing generates an ID and
    # returns it in the X-MSEdge-ClientID response header. The only time that you
    # should NOT include this header in a request is the first time the user uses
    # your app on that device. Use the client ID for each Bing API request that
    # your app makes for this user on the device. Persist the client ID. To persist
    # the ID in a browser app, use a persistent HTTP cookie to ensure the ID is
    # used across all sessions. Do not use a session cookie. For other apps such as
    # mobile apps, use the device's persistent storage to persist the ID. The next
    # time the user uses your app on that device, get the client ID that you
    # persisted. Bing responses may or may not include this header. If the response
    # includes this header, capture the client ID and use it for all subsequent
    # Bing requests for the user on that device. If you include the
    # X-MSEdge-ClientID, you must not include cookies in the request.
    # @param client_ip [String] The IPv4 or IPv6 address of the client device. The
    # IP address is used to discover the user's location. Bing uses the location
    # information to determine safe search behavior. Although optional, you are
    # encouraged to always specify this header and the X-Search-Location header. Do
    # not obfuscate the address (for example, by changing the last octet to 0).
    # Obfuscating the address results in the location not being anywhere near the
    # device's actual location, which may result in Bing serving erroneous results.
    # @param location [String] A semicolon-delimited list of key/value pairs that
    # describe the client's geographical location. Bing uses the location
    # information to determine safe search behavior and to return relevant local
    # content. Specify the key/value pair as <key>:<value>. The following are the
    # keys that you use to specify the user's location. lat (required): The
    # latitude of the client's location, in degrees. The latitude must be greater
    # than or equal to -90.0 and less than or equal to +90.0. Negative values
    # indicate southern latitudes and positive values indicate northern latitudes.
    # long (required): The longitude of the client's location, in degrees. The
    # longitude must be greater than or equal to -180.0 and less than or equal to
    # +180.0. Negative values indicate western longitudes and positive values
    # indicate eastern longitudes. re (required): The radius, in meters, which
    # specifies the horizontal accuracy of the coordinates. Pass the value returned
    # by the device's location service. Typical values might be 22m for GPS/Wi-Fi,
    # 380m for cell tower triangulation, and 18,000m for reverse IP lookup. ts
    # (optional): The UTC UNIX timestamp of when the client was at the location.
    # (The UNIX timestamp is the number of seconds since January 1, 1970.) head
    # (optional): The client's relative heading or direction of travel. Specify the
    # direction of travel as degrees from 0 through 360, counting clockwise
    # relative to true north. Specify this key only if the sp key is nonzero. sp
    # (optional): The horizontal velocity (speed), in meters per second, that the
    # client device is traveling. alt (optional): The altitude of the client
    # device, in meters. are (optional): The radius, in meters, that specifies the
    # vertical accuracy of the coordinates. Specify this key only if you specify
    # the alt key. Although many of the keys are optional, the more information
    # that you provide, the more accurate the location results are. Although
    # optional, you are encouraged to always specify the user's geographical
    # location. Providing the location is especially important if the client's IP
    # address does not accurately reflect the user's physical location (for
    # example, if the client uses VPN). For optimal results, you should include
    # this header and the X-MSEdge-ClientIP header, but at a minimum, you should
    # include this header.
    # @param country_code [String] A 2-character country code of the country where
    # the results come from. This API supports only the United States market. If
    # you specify this query parameter, it must be set to us. If you set this
    # parameter, you must also specify the Accept-Language header. Bing uses the
    # first supported language it finds from the languages list, and combine that
    # language with the country code that you specify to determine the market to
    # return results for. If the languages list does not include a supported
    # language, Bing finds the closest language and market that supports the
    # request, or it may use an aggregated or default market for the results
    # instead of a specified one. You should use this query parameter and the
    # Accept-Language query parameter only if you specify multiple languages;
    # otherwise, you should use the mkt and setLang query parameters. This
    # parameter and the mkt query parameter are mutually exclusive—do not specify
    # both.
    # @param id [String] An ID that uniquely identifies a video. The
    # [Video](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-video-api-v7-reference#video)
    # object's videoId field contains the ID that you set this parameter to. You
    # use this parameter to identify the video to get insights of.
    # @param modules [Array<VideoInsightModule>] A comma-delimited list of insights
    # to request. The following are the possible case-insensitive values. All:
    # Return all available insights. RelatedVideos: Return a list of videos that
    # are similar to the video specified by the id query parameter. VideoResult:
    # Return the video that you're requesting insights of (this is the video that
    # you set the id query parameter to in your insights request). If you specify
    # an insight and there is no data for it, the response object does not include
    # the related field. For example, if you specify RelatedVideos and none exist,
    # the response does not include the relatedVideos field. Although the user's
    # query term is not required, you should always include it because it helps to
    # improve relevance and the results.
    # @param market [String] The market where the results come from. Typically, mkt
    # is the country where the user is making the request from. However, it could
    # be a different country if the user is not located in a country where Bing
    # delivers results. The market must be in the form <language code>-<country
    # code>. For example, en-US. The string is case insensitive. For a list of
    # possible market values, see [Market
    # Codes](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-video-api-v7-reference#market-codes).
    # NOTE: If known, you are encouraged to always specify the market. Specifying
    # the market helps Bing route the request and return an appropriate and optimal
    # response. If you specify a market that is not listed in [Market
    # Codes](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-video-api-v7-reference#market-codes),
    # Bing uses a best fit market code based on an internal mapping that is subject
    # to change. This parameter and the
    # [cc](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-video-api-v7-reference#cc)
    # query parameter are mutually exclusive—do not specify both.
    # @param resolution [VideoResolution] Filter videos by the following
    # resolutions: SD480p: Return videos with a 480p or higher resolution. HD720p:
    # Return videos with a 720p or higher resolution. HD1080p: Return videos with a
    # 1080p or higher resolution. All: Do not filter by resolution.Specifying this
    # value is the same as not specifying the resolution parameter. Possible values
    # include: 'All', 'SD480p', 'HD720p', 'HD1080p'
    # @param safe_search [SafeSearch] Filter videos for adult content. The
    # following are the possible filter values. Off: If the request is through the
    # Video Search API, the response includes adult videos and the thumbnail images
    # of the videos are clear (non-fuzzy). If the request is through the Web Search
    # API, the response includes adult videos but the thumbnail images of the
    # videos are pixelated (fuzzy). Moderate: If the request is through the Video
    # Search API, the response does not include videos with adult content. If the
    # request is through the Web Search API, the response may include videos with
    # adult content but the thumbnail images of the videos are pixelated (fuzzy).
    # Strict: Does not return videos with adult content. The default is Moderate.
    # If the request comes from a market that Bing's adult policy requires that
    # safeSearch is set to Strict, Bing ignores the safeSearch value and uses
    # Strict. If you use the site: query operator, there is the chance that the
    # response may contain adult content regardless of what the safeSearch query
    # parameter is set to. Use site: only if you are aware of the content on the
    # site and your scenario supports the possibility of adult content. Possible
    # values include: 'Off', 'Moderate', 'Strict'
    # @param set_lang [String] The language to use for user interface strings.
    # Specify the language using the ISO 639-1 2-letter language code. For example,
    # the language code for English is EN. The default is EN (English). Although
    # optional, you should always specify the language. Typically, you set setLang
    # to the same language specified by mkt unless the user wants the user
    # interface strings displayed in a different language. This parameter and the
    # [Accept-Language](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-video-api-v7-reference#acceptlanguage)
    # header are mutually exclusive; do not specify both. A user interface string
    # is a string that's used as a label in a user interface. There are few user
    # interface strings in the JSON response objects. Also, any links to Bing.com
    # properties in the response objects apply the specified language.
    # @param text_decorations [Boolean] A Boolean value that determines whether
    # display strings contain decoration markers such as hit highlighting
    # characters. If true, the strings may include markers. The default is false.
    # To specify whether to use Unicode characters or HTML tags as the markers, see
    # the
    # [textFormat](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-video-api-v7-reference#textformat)
    # query parameter. For information about hit highlighting, see [Hit
    # Highlighting](https://docs.microsoft.com/azure/cognitive-services/bing-news-search/hit-highlighting).
    # @param text_format [TextFormat] The type of markers to use for text
    # decorations (see the textDecorations query parameter). Possible values are
    # Raw—Use Unicode characters to mark content that needs special formatting. The
    # Unicode characters are in the range E000 through E019. For example, Bing uses
    # E000 and E001 to mark the beginning and end of query terms for hit
    # highlighting. HTML—Use HTML tags to mark content that needs special
    # formatting. For example, use <b> tags to highlight query terms in display
    # strings. The default is Raw. For display strings that contain escapable HTML
    # characters such as <, >, and &, if textFormat is set to HTML, Bing escapes
    # the characters as appropriate (for example, < is escaped to &lt;). Possible
    # values include: 'Raw', 'Html'
    # @param custom_headers [Hash{String => String}] A hash of custom headers that
    # will be added to the HTTP request.
    #
    # @return [VideoDetails] operation results.
    #
    def details(query, accept_language:nil, user_agent:nil, client_id:nil, client_ip:nil, location:nil, country_code:nil, id:nil, modules:nil, market:nil, resolution:nil, safe_search:nil, set_lang:nil, text_decorations:nil, text_format:nil, custom_headers:nil)
      response = details_async(query, accept_language:accept_language, user_agent:user_agent, client_id:client_id, client_ip:client_ip, location:location, country_code:country_code, id:id, modules:modules, market:market, resolution:resolution, safe_search:safe_search, set_lang:set_lang, text_decorations:text_decorations, text_format:text_format, custom_headers:custom_headers).value!
      response.body unless response.nil?
    end

    #
    # The Video Detail Search API lets you search on Bing and get back insights
    # about a video, such as related videos. This section provides technical
    # details about the query parameters and headers that you use to request
    # insights of videos and the JSON response objects that contain them. For
    # examples that show how to make requests, see [Searching the Web for
    # Videos](https://docs.microsoft.com/azure/cognitive-services/bing-video-search/search-the-web).
    #
    # @param query [String] The user's search query string. The query string cannot
    # be empty. The query string may contain [Bing Advanced
    # Operators](http://msdn.microsoft.com/library/ff795620.aspx). For example, to
    # limit videos to a specific domain, use the
    # [site:](http://msdn.microsoft.com/library/ff795613.aspx) operator. Use this
    # parameter only with the Video Search API. Do not specify this parameter when
    # calling the Trending Videos API.
    # @param accept_language [String] A comma-delimited list of one or more
    # languages to use for user interface strings. The list is in decreasing order
    # of preference. For additional information, including expected format, see
    # [RFC2616](http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html). This
    # header and the
    # [setLang](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-video-api-v7-reference#setlang)
    # query parameter are mutually exclusive; do not specify both. If you set this
    # header, you must also specify the
    # [cc](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-video-api-v7-reference#cc)
    # query parameter. To determine the market to return results for, Bing uses the
    # first supported language it finds from the list and combines it with the cc
    # parameter value. If the list does not include a supported language, Bing
    # finds the closest language and market that supports the request or it uses an
    # aggregated or default market for the results. To determine the market that
    # Bing used, see the BingAPIs-Market header. Use this header and the cc query
    # parameter only if you specify multiple languages. Otherwise, use the
    # [mkt](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-video-api-v7-reference#mkt)
    # and
    # [setLang](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-video-api-v7-reference#setlang)
    # query parameters. A user interface string is a string that's used as a label
    # in a user interface. There are few user interface strings in the JSON
    # response objects. Any links to Bing.com properties in the response objects
    # apply the specified language.
    # @param user_agent [String] The user agent originating the request. Bing uses
    # the user agent to provide mobile users with an optimized experience. Although
    # optional, you are encouraged to always specify this header. The user-agent
    # should be the same string that any commonly used browser sends. For
    # information about user agents, see [RFC
    # 2616](http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html). The following
    # are examples of user-agent strings. Windows Phone: Mozilla/5.0 (compatible;
    # MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA;
    # Lumia 822). Android: Mozilla / 5.0 (Linux; U; Android 2.3.5; en - us; SCH -
    # I500 Build / GINGERBREAD) AppleWebKit / 533.1 (KHTML; like Gecko) Version /
    # 4.0 Mobile Safari / 533.1. iPhone: Mozilla / 5.0 (iPhone; CPU iPhone OS 6_1
    # like Mac OS X) AppleWebKit / 536.26 (KHTML; like Gecko) Mobile / 10B142
    # iPhone4; 1 BingWeb / 3.03.1428.20120423. PC: Mozilla / 5.0 (Windows NT 6.3;
    # WOW64; Trident / 7.0; Touch; rv:11.0) like Gecko. iPad: Mozilla / 5.0 (iPad;
    # CPU OS 7_0 like Mac OS X) AppleWebKit / 537.51.1 (KHTML, like Gecko) Version
    # / 7.0 Mobile / 11A465 Safari / 9537.53
    # @param client_id [String] Bing uses this header to provide users with
    # consistent behavior across Bing API calls. Bing often flights new features
    # and improvements, and it uses the client ID as a key for assigning traffic on
    # different flights. If you do not use the same client ID for a user across
    # multiple requests, then Bing may assign the user to multiple conflicting
    # flights. Being assigned to multiple conflicting flights can lead to an
    # inconsistent user experience. For example, if the second request has a
    # different flight assignment than the first, the experience may be unexpected.
    # Also, Bing can use the client ID to tailor web results to that client ID’s
    # search history, providing a richer experience for the user. Bing also uses
    # this header to help improve result rankings by analyzing the activity
    # generated by a client ID. The relevance improvements help with better quality
    # of results delivered by Bing APIs and in turn enables higher click-through
    # rates for the API consumer. IMPORTANT: Although optional, you should consider
    # this header required. Persisting the client ID across multiple requests for
    # the same end user and device combination enables 1) the API consumer to
    # receive a consistent user experience, and 2) higher click-through rates via
    # better quality of results from the Bing APIs. Each user that uses your
    # application on the device must have a unique, Bing generated client ID. If
    # you do not include this header in the request, Bing generates an ID and
    # returns it in the X-MSEdge-ClientID response header. The only time that you
    # should NOT include this header in a request is the first time the user uses
    # your app on that device. Use the client ID for each Bing API request that
    # your app makes for this user on the device. Persist the client ID. To persist
    # the ID in a browser app, use a persistent HTTP cookie to ensure the ID is
    # used across all sessions. Do not use a session cookie. For other apps such as
    # mobile apps, use the device's persistent storage to persist the ID. The next
    # time the user uses your app on that device, get the client ID that you
    # persisted. Bing responses may or may not include this header. If the response
    # includes this header, capture the client ID and use it for all subsequent
    # Bing requests for the user on that device. If you include the
    # X-MSEdge-ClientID, you must not include cookies in the request.
    # @param client_ip [String] The IPv4 or IPv6 address of the client device. The
    # IP address is used to discover the user's location. Bing uses the location
    # information to determine safe search behavior. Although optional, you are
    # encouraged to always specify this header and the X-Search-Location header. Do
    # not obfuscate the address (for example, by changing the last octet to 0).
    # Obfuscating the address results in the location not being anywhere near the
    # device's actual location, which may result in Bing serving erroneous results.
    # @param location [String] A semicolon-delimited list of key/value pairs that
    # describe the client's geographical location. Bing uses the location
    # information to determine safe search behavior and to return relevant local
    # content. Specify the key/value pair as <key>:<value>. The following are the
    # keys that you use to specify the user's location. lat (required): The
    # latitude of the client's location, in degrees. The latitude must be greater
    # than or equal to -90.0 and less than or equal to +90.0. Negative values
    # indicate southern latitudes and positive values indicate northern latitudes.
    # long (required): The longitude of the client's location, in degrees. The
    # longitude must be greater than or equal to -180.0 and less than or equal to
    # +180.0. Negative values indicate western longitudes and positive values
    # indicate eastern longitudes. re (required): The radius, in meters, which
    # specifies the horizontal accuracy of the coordinates. Pass the value returned
    # by the device's location service. Typical values might be 22m for GPS/Wi-Fi,
    # 380m for cell tower triangulation, and 18,000m for reverse IP lookup. ts
    # (optional): The UTC UNIX timestamp of when the client was at the location.
    # (The UNIX timestamp is the number of seconds since January 1, 1970.) head
    # (optional): The client's relative heading or direction of travel. Specify the
    # direction of travel as degrees from 0 through 360, counting clockwise
    # relative to true north. Specify this key only if the sp key is nonzero. sp
    # (optional): The horizontal velocity (speed), in meters per second, that the
    # client device is traveling. alt (optional): The altitude of the client
    # device, in meters. are (optional): The radius, in meters, that specifies the
    # vertical accuracy of the coordinates. Specify this key only if you specify
    # the alt key. Although many of the keys are optional, the more information
    # that you provide, the more accurate the location results are. Although
    # optional, you are encouraged to always specify the user's geographical
    # location. Providing the location is especially important if the client's IP
    # address does not accurately reflect the user's physical location (for
    # example, if the client uses VPN). For optimal results, you should include
    # this header and the X-MSEdge-ClientIP header, but at a minimum, you should
    # include this header.
    # @param country_code [String] A 2-character country code of the country where
    # the results come from. This API supports only the United States market. If
    # you specify this query parameter, it must be set to us. If you set this
    # parameter, you must also specify the Accept-Language header. Bing uses the
    # first supported language it finds from the languages list, and combine that
    # language with the country code that you specify to determine the market to
    # return results for. If the languages list does not include a supported
    # language, Bing finds the closest language and market that supports the
    # request, or it may use an aggregated or default market for the results
    # instead of a specified one. You should use this query parameter and the
    # Accept-Language query parameter only if you specify multiple languages;
    # otherwise, you should use the mkt and setLang query parameters. This
    # parameter and the mkt query parameter are mutually exclusive—do not specify
    # both.
    # @param id [String] An ID that uniquely identifies a video. The
    # [Video](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-video-api-v7-reference#video)
    # object's videoId field contains the ID that you set this parameter to. You
    # use this parameter to identify the video to get insights of.
    # @param modules [Array<VideoInsightModule>] A comma-delimited list of insights
    # to request. The following are the possible case-insensitive values. All:
    # Return all available insights. RelatedVideos: Return a list of videos that
    # are similar to the video specified by the id query parameter. VideoResult:
    # Return the video that you're requesting insights of (this is the video that
    # you set the id query parameter to in your insights request). If you specify
    # an insight and there is no data for it, the response object does not include
    # the related field. For example, if you specify RelatedVideos and none exist,
    # the response does not include the relatedVideos field. Although the user's
    # query term is not required, you should always include it because it helps to
    # improve relevance and the results.
    # @param market [String] The market where the results come from. Typically, mkt
    # is the country where the user is making the request from. However, it could
    # be a different country if the user is not located in a country where Bing
    # delivers results. The market must be in the form <language code>-<country
    # code>. For example, en-US. The string is case insensitive. For a list of
    # possible market values, see [Market
    # Codes](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-video-api-v7-reference#market-codes).
    # NOTE: If known, you are encouraged to always specify the market. Specifying
    # the market helps Bing route the request and return an appropriate and optimal
    # response. If you specify a market that is not listed in [Market
    # Codes](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-video-api-v7-reference#market-codes),
    # Bing uses a best fit market code based on an internal mapping that is subject
    # to change. This parameter and the
    # [cc](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-video-api-v7-reference#cc)
    # query parameter are mutually exclusive—do not specify both.
    # @param resolution [VideoResolution] Filter videos by the following
    # resolutions: SD480p: Return videos with a 480p or higher resolution. HD720p:
    # Return videos with a 720p or higher resolution. HD1080p: Return videos with a
    # 1080p or higher resolution. All: Do not filter by resolution.Specifying this
    # value is the same as not specifying the resolution parameter. Possible values
    # include: 'All', 'SD480p', 'HD720p', 'HD1080p'
    # @param safe_search [SafeSearch] Filter videos for adult content. The
    # following are the possible filter values. Off: If the request is through the
    # Video Search API, the response includes adult videos and the thumbnail images
    # of the videos are clear (non-fuzzy). If the request is through the Web Search
    # API, the response includes adult videos but the thumbnail images of the
    # videos are pixelated (fuzzy). Moderate: If the request is through the Video
    # Search API, the response does not include videos with adult content. If the
    # request is through the Web Search API, the response may include videos with
    # adult content but the thumbnail images of the videos are pixelated (fuzzy).
    # Strict: Does not return videos with adult content. The default is Moderate.
    # If the request comes from a market that Bing's adult policy requires that
    # safeSearch is set to Strict, Bing ignores the safeSearch value and uses
    # Strict. If you use the site: query operator, there is the chance that the
    # response may contain adult content regardless of what the safeSearch query
    # parameter is set to. Use site: only if you are aware of the content on the
    # site and your scenario supports the possibility of adult content. Possible
    # values include: 'Off', 'Moderate', 'Strict'
    # @param set_lang [String] The language to use for user interface strings.
    # Specify the language using the ISO 639-1 2-letter language code. For example,
    # the language code for English is EN. The default is EN (English). Although
    # optional, you should always specify the language. Typically, you set setLang
    # to the same language specified by mkt unless the user wants the user
    # interface strings displayed in a different language. This parameter and the
    # [Accept-Language](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-video-api-v7-reference#acceptlanguage)
    # header are mutually exclusive; do not specify both. A user interface string
    # is a string that's used as a label in a user interface. There are few user
    # interface strings in the JSON response objects. Also, any links to Bing.com
    # properties in the response objects apply the specified language.
    # @param text_decorations [Boolean] A Boolean value that determines whether
    # display strings contain decoration markers such as hit highlighting
    # characters. If true, the strings may include markers. The default is false.
    # To specify whether to use Unicode characters or HTML tags as the markers, see
    # the
    # [textFormat](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-video-api-v7-reference#textformat)
    # query parameter. For information about hit highlighting, see [Hit
    # Highlighting](https://docs.microsoft.com/azure/cognitive-services/bing-news-search/hit-highlighting).
    # @param text_format [TextFormat] The type of markers to use for text
    # decorations (see the textDecorations query parameter). Possible values are
    # Raw—Use Unicode characters to mark content that needs special formatting. The
    # Unicode characters are in the range E000 through E019. For example, Bing uses
    # E000 and E001 to mark the beginning and end of query terms for hit
    # highlighting. HTML—Use HTML tags to mark content that needs special
    # formatting. For example, use <b> tags to highlight query terms in display
    # strings. The default is Raw. For display strings that contain escapable HTML
    # characters such as <, >, and &, if textFormat is set to HTML, Bing escapes
    # the characters as appropriate (for example, < is escaped to &lt;). Possible
    # values include: 'Raw', 'Html'
    # @param custom_headers [Hash{String => String}] A hash of custom headers that
    # will be added to the HTTP request.
    #
    # @return [MsRestAzure::AzureOperationResponse] HTTP response information.
    #
    def details_with_http_info(query, accept_language:nil, user_agent:nil, client_id:nil, client_ip:nil, location:nil, country_code:nil, id:nil, modules:nil, market:nil, resolution:nil, safe_search:nil, set_lang:nil, text_decorations:nil, text_format:nil, custom_headers:nil)
      details_async(query, accept_language:accept_language, user_agent:user_agent, client_id:client_id, client_ip:client_ip, location:location, country_code:country_code, id:id, modules:modules, market:market, resolution:resolution, safe_search:safe_search, set_lang:set_lang, text_decorations:text_decorations, text_format:text_format, custom_headers:custom_headers).value!
    end

    #
    # The Video Detail Search API lets you search on Bing and get back insights
    # about a video, such as related videos. This section provides technical
    # details about the query parameters and headers that you use to request
    # insights of videos and the JSON response objects that contain them. For
    # examples that show how to make requests, see [Searching the Web for
    # Videos](https://docs.microsoft.com/azure/cognitive-services/bing-video-search/search-the-web).
    #
    # @param query [String] The user's search query string. The query string cannot
    # be empty. The query string may contain [Bing Advanced
    # Operators](http://msdn.microsoft.com/library/ff795620.aspx). For example, to
    # limit videos to a specific domain, use the
    # [site:](http://msdn.microsoft.com/library/ff795613.aspx) operator. Use this
    # parameter only with the Video Search API. Do not specify this parameter when
    # calling the Trending Videos API.
    # @param accept_language [String] A comma-delimited list of one or more
    # languages to use for user interface strings. The list is in decreasing order
    # of preference. For additional information, including expected format, see
    # [RFC2616](http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html). This
    # header and the
    # [setLang](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-video-api-v7-reference#setlang)
    # query parameter are mutually exclusive; do not specify both. If you set this
    # header, you must also specify the
    # [cc](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-video-api-v7-reference#cc)
    # query parameter. To determine the market to return results for, Bing uses the
    # first supported language it finds from the list and combines it with the cc
    # parameter value. If the list does not include a supported language, Bing
    # finds the closest language and market that supports the request or it uses an
    # aggregated or default market for the results. To determine the market that
    # Bing used, see the BingAPIs-Market header. Use this header and the cc query
    # parameter only if you specify multiple languages. Otherwise, use the
    # [mkt](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-video-api-v7-reference#mkt)
    # and
    # [setLang](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-video-api-v7-reference#setlang)
    # query parameters. A user interface string is a string that's used as a label
    # in a user interface. There are few user interface strings in the JSON
    # response objects. Any links to Bing.com properties in the response objects
    # apply the specified language.
    # @param user_agent [String] The user agent originating the request. Bing uses
    # the user agent to provide mobile users with an optimized experience. Although
    # optional, you are encouraged to always specify this header. The user-agent
    # should be the same string that any commonly used browser sends. For
    # information about user agents, see [RFC
    # 2616](http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html). The following
    # are examples of user-agent strings. Windows Phone: Mozilla/5.0 (compatible;
    # MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA;
    # Lumia 822). Android: Mozilla / 5.0 (Linux; U; Android 2.3.5; en - us; SCH -
    # I500 Build / GINGERBREAD) AppleWebKit / 533.1 (KHTML; like Gecko) Version /
    # 4.0 Mobile Safari / 533.1. iPhone: Mozilla / 5.0 (iPhone; CPU iPhone OS 6_1
    # like Mac OS X) AppleWebKit / 536.26 (KHTML; like Gecko) Mobile / 10B142
    # iPhone4; 1 BingWeb / 3.03.1428.20120423. PC: Mozilla / 5.0 (Windows NT 6.3;
    # WOW64; Trident / 7.0; Touch; rv:11.0) like Gecko. iPad: Mozilla / 5.0 (iPad;
    # CPU OS 7_0 like Mac OS X) AppleWebKit / 537.51.1 (KHTML, like Gecko) Version
    # / 7.0 Mobile / 11A465 Safari / 9537.53
    # @param client_id [String] Bing uses this header to provide users with
    # consistent behavior across Bing API calls. Bing often flights new features
    # and improvements, and it uses the client ID as a key for assigning traffic on
    # different flights. If you do not use the same client ID for a user across
    # multiple requests, then Bing may assign the user to multiple conflicting
    # flights. Being assigned to multiple conflicting flights can lead to an
    # inconsistent user experience. For example, if the second request has a
    # different flight assignment than the first, the experience may be unexpected.
    # Also, Bing can use the client ID to tailor web results to that client ID’s
    # search history, providing a richer experience for the user. Bing also uses
    # this header to help improve result rankings by analyzing the activity
    # generated by a client ID. The relevance improvements help with better quality
    # of results delivered by Bing APIs and in turn enables higher click-through
    # rates for the API consumer. IMPORTANT: Although optional, you should consider
    # this header required. Persisting the client ID across multiple requests for
    # the same end user and device combination enables 1) the API consumer to
    # receive a consistent user experience, and 2) higher click-through rates via
    # better quality of results from the Bing APIs. Each user that uses your
    # application on the device must have a unique, Bing generated client ID. If
    # you do not include this header in the request, Bing generates an ID and
    # returns it in the X-MSEdge-ClientID response header. The only time that you
    # should NOT include this header in a request is the first time the user uses
    # your app on that device. Use the client ID for each Bing API request that
    # your app makes for this user on the device. Persist the client ID. To persist
    # the ID in a browser app, use a persistent HTTP cookie to ensure the ID is
    # used across all sessions. Do not use a session cookie. For other apps such as
    # mobile apps, use the device's persistent storage to persist the ID. The next
    # time the user uses your app on that device, get the client ID that you
    # persisted. Bing responses may or may not include this header. If the response
    # includes this header, capture the client ID and use it for all subsequent
    # Bing requests for the user on that device. If you include the
    # X-MSEdge-ClientID, you must not include cookies in the request.
    # @param client_ip [String] The IPv4 or IPv6 address of the client device. The
    # IP address is used to discover the user's location. Bing uses the location
    # information to determine safe search behavior. Although optional, you are
    # encouraged to always specify this header and the X-Search-Location header. Do
    # not obfuscate the address (for example, by changing the last octet to 0).
    # Obfuscating the address results in the location not being anywhere near the
    # device's actual location, which may result in Bing serving erroneous results.
    # @param location [String] A semicolon-delimited list of key/value pairs that
    # describe the client's geographical location. Bing uses the location
    # information to determine safe search behavior and to return relevant local
    # content. Specify the key/value pair as <key>:<value>. The following are the
    # keys that you use to specify the user's location. lat (required): The
    # latitude of the client's location, in degrees. The latitude must be greater
    # than or equal to -90.0 and less than or equal to +90.0. Negative values
    # indicate southern latitudes and positive values indicate northern latitudes.
    # long (required): The longitude of the client's location, in degrees. The
    # longitude must be greater than or equal to -180.0 and less than or equal to
    # +180.0. Negative values indicate western longitudes and positive values
    # indicate eastern longitudes. re (required): The radius, in meters, which
    # specifies the horizontal accuracy of the coordinates. Pass the value returned
    # by the device's location service. Typical values might be 22m for GPS/Wi-Fi,
    # 380m for cell tower triangulation, and 18,000m for reverse IP lookup. ts
    # (optional): The UTC UNIX timestamp of when the client was at the location.
    # (The UNIX timestamp is the number of seconds since January 1, 1970.) head
    # (optional): The client's relative heading or direction of travel. Specify the
    # direction of travel as degrees from 0 through 360, counting clockwise
    # relative to true north. Specify this key only if the sp key is nonzero. sp
    # (optional): The horizontal velocity (speed), in meters per second, that the
    # client device is traveling. alt (optional): The altitude of the client
    # device, in meters. are (optional): The radius, in meters, that specifies the
    # vertical accuracy of the coordinates. Specify this key only if you specify
    # the alt key. Although many of the keys are optional, the more information
    # that you provide, the more accurate the location results are. Although
    # optional, you are encouraged to always specify the user's geographical
    # location. Providing the location is especially important if the client's IP
    # address does not accurately reflect the user's physical location (for
    # example, if the client uses VPN). For optimal results, you should include
    # this header and the X-MSEdge-ClientIP header, but at a minimum, you should
    # include this header.
    # @param country_code [String] A 2-character country code of the country where
    # the results come from. This API supports only the United States market. If
    # you specify this query parameter, it must be set to us. If you set this
    # parameter, you must also specify the Accept-Language header. Bing uses the
    # first supported language it finds from the languages list, and combine that
    # language with the country code that you specify to determine the market to
    # return results for. If the languages list does not include a supported
    # language, Bing finds the closest language and market that supports the
    # request, or it may use an aggregated or default market for the results
    # instead of a specified one. You should use this query parameter and the
    # Accept-Language query parameter only if you specify multiple languages;
    # otherwise, you should use the mkt and setLang query parameters. This
    # parameter and the mkt query parameter are mutually exclusive—do not specify
    # both.
    # @param id [String] An ID that uniquely identifies a video. The
    # [Video](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-video-api-v7-reference#video)
    # object's videoId field contains the ID that you set this parameter to. You
    # use this parameter to identify the video to get insights of.
    # @param modules [Array<VideoInsightModule>] A comma-delimited list of insights
    # to request. The following are the possible case-insensitive values. All:
    # Return all available insights. RelatedVideos: Return a list of videos that
    # are similar to the video specified by the id query parameter. VideoResult:
    # Return the video that you're requesting insights of (this is the video that
    # you set the id query parameter to in your insights request). If you specify
    # an insight and there is no data for it, the response object does not include
    # the related field. For example, if you specify RelatedVideos and none exist,
    # the response does not include the relatedVideos field. Although the user's
    # query term is not required, you should always include it because it helps to
    # improve relevance and the results.
    # @param market [String] The market where the results come from. Typically, mkt
    # is the country where the user is making the request from. However, it could
    # be a different country if the user is not located in a country where Bing
    # delivers results. The market must be in the form <language code>-<country
    # code>. For example, en-US. The string is case insensitive. For a list of
    # possible market values, see [Market
    # Codes](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-video-api-v7-reference#market-codes).
    # NOTE: If known, you are encouraged to always specify the market. Specifying
    # the market helps Bing route the request and return an appropriate and optimal
    # response. If you specify a market that is not listed in [Market
    # Codes](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-video-api-v7-reference#market-codes),
    # Bing uses a best fit market code based on an internal mapping that is subject
    # to change. This parameter and the
    # [cc](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-video-api-v7-reference#cc)
    # query parameter are mutually exclusive—do not specify both.
    # @param resolution [VideoResolution] Filter videos by the following
    # resolutions: SD480p: Return videos with a 480p or higher resolution. HD720p:
    # Return videos with a 720p or higher resolution. HD1080p: Return videos with a
    # 1080p or higher resolution. All: Do not filter by resolution.Specifying this
    # value is the same as not specifying the resolution parameter. Possible values
    # include: 'All', 'SD480p', 'HD720p', 'HD1080p'
    # @param safe_search [SafeSearch] Filter videos for adult content. The
    # following are the possible filter values. Off: If the request is through the
    # Video Search API, the response includes adult videos and the thumbnail images
    # of the videos are clear (non-fuzzy). If the request is through the Web Search
    # API, the response includes adult videos but the thumbnail images of the
    # videos are pixelated (fuzzy). Moderate: If the request is through the Video
    # Search API, the response does not include videos with adult content. If the
    # request is through the Web Search API, the response may include videos with
    # adult content but the thumbnail images of the videos are pixelated (fuzzy).
    # Strict: Does not return videos with adult content. The default is Moderate.
    # If the request comes from a market that Bing's adult policy requires that
    # safeSearch is set to Strict, Bing ignores the safeSearch value and uses
    # Strict. If you use the site: query operator, there is the chance that the
    # response may contain adult content regardless of what the safeSearch query
    # parameter is set to. Use site: only if you are aware of the content on the
    # site and your scenario supports the possibility of adult content. Possible
    # values include: 'Off', 'Moderate', 'Strict'
    # @param set_lang [String] The language to use for user interface strings.
    # Specify the language using the ISO 639-1 2-letter language code. For example,
    # the language code for English is EN. The default is EN (English). Although
    # optional, you should always specify the language. Typically, you set setLang
    # to the same language specified by mkt unless the user wants the user
    # interface strings displayed in a different language. This parameter and the
    # [Accept-Language](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-video-api-v7-reference#acceptlanguage)
    # header are mutually exclusive; do not specify both. A user interface string
    # is a string that's used as a label in a user interface. There are few user
    # interface strings in the JSON response objects. Also, any links to Bing.com
    # properties in the response objects apply the specified language.
    # @param text_decorations [Boolean] A Boolean value that determines whether
    # display strings contain decoration markers such as hit highlighting
    # characters. If true, the strings may include markers. The default is false.
    # To specify whether to use Unicode characters or HTML tags as the markers, see
    # the
    # [textFormat](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-video-api-v7-reference#textformat)
    # query parameter. For information about hit highlighting, see [Hit
    # Highlighting](https://docs.microsoft.com/azure/cognitive-services/bing-news-search/hit-highlighting).
    # @param text_format [TextFormat] The type of markers to use for text
    # decorations (see the textDecorations query parameter). Possible values are
    # Raw—Use Unicode characters to mark content that needs special formatting. The
    # Unicode characters are in the range E000 through E019. For example, Bing uses
    # E000 and E001 to mark the beginning and end of query terms for hit
    # highlighting. HTML—Use HTML tags to mark content that needs special
    # formatting. For example, use <b> tags to highlight query terms in display
    # strings. The default is Raw. For display strings that contain escapable HTML
    # characters such as <, >, and &, if textFormat is set to HTML, Bing escapes
    # the characters as appropriate (for example, < is escaped to &lt;). Possible
    # values include: 'Raw', 'Html'
    # @param [Hash{String => String}] A hash of custom headers that will be added
    # to the HTTP request.
    #
    # @return [Concurrent::Promise] Promise object which holds the HTTP response.
    #
    def details_async(query, accept_language:nil, user_agent:nil, client_id:nil, client_ip:nil, location:nil, country_code:nil, id:nil, modules:nil, market:nil, resolution:nil, safe_search:nil, set_lang:nil, text_decorations:nil, text_format:nil, custom_headers:nil)
      fail ArgumentError, '@client.endpoint is nil' if @client.endpoint.nil?
      x_bing_apis_sdk = 'true'
      fail ArgumentError, 'query is nil' if query.nil?


      request_headers = {}
      request_headers['Content-Type'] = 'application/json; charset=utf-8'

      # Set Headers
      request_headers['x-ms-client-request-id'] = SecureRandom.uuid
      request_headers['X-BingApis-SDK'] = x_bing_apis_sdk unless x_bing_apis_sdk.nil?
      request_headers['Accept-Language'] = accept_language unless accept_language.nil?
      request_headers['User-Agent'] = user_agent unless user_agent.nil?
      request_headers['X-MSEdge-ClientID'] = client_id unless client_id.nil?
      request_headers['X-MSEdge-ClientIP'] = client_ip unless client_ip.nil?
      request_headers['X-Search-Location'] = location unless location.nil?
      path_template = 'videos/details'

      request_url = @base_url || @client.base_url
    request_url = request_url.gsub('{Endpoint}', @client.endpoint)

      options = {
          middlewares: [[MsRest::RetryPolicyMiddleware, times: 3, retry: 0.02], [:cookie_jar]],
          query_params: {'cc' => country_code,'id' => id,'modules' => modules.nil? ? nil : modules.join(','),'mkt' => market,'q' => query,'resolution' => resolution,'safeSearch' => safe_search,'setLang' => set_lang,'textDecorations' => text_decorations,'textFormat' => text_format},
          headers: request_headers.merge(custom_headers || {}),
          base_url: request_url
      }
      promise = @client.make_request_async(:get, path_template, options)

      promise = promise.then do |result|
        http_response = result.response
        status_code = http_response.status
        response_content = http_response.body
        unless status_code == 200
          error_model = JSON.load(response_content)
          fail MsRest::HttpOperationError.new(result.request, http_response, error_model)
        end

        result.request_id = http_response['x-ms-request-id'] unless http_response['x-ms-request-id'].nil?
        # Deserialize Response
        if status_code == 200
          begin
            parsed_response = response_content.to_s.empty? ? nil : JSON.load(response_content)
            result_mapper = Azure::CognitiveServices::VideoSearch::V1_0::Models::VideoDetails.mapper()
            result.body = @client.deserialize(result_mapper, parsed_response)
          rescue Exception => e
            fail MsRest::DeserializationError.new('Error occurred in deserializing the response', e.message, e.backtrace, result)
          end
        end

        result
      end

      promise.execute
    end

    #
    # The Video Trending Search API lets you search on Bing and get back a list of
    # videos that are trending based on search requests made by others. The videos
    # are broken out into different categories. For example, Top Music Videos. For
    # a list of markets that support trending videos, see [Trending
    # Videos](https://docs.microsoft.com/azure/cognitive-services/bing-video-search/trending-videos).
    #
    # @param accept_language [String] A comma-delimited list of one or more
    # languages to use for user interface strings. The list is in decreasing order
    # of preference. For additional information, including expected format, see
    # [RFC2616](http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html). This
    # header and the
    # [setLang](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-video-api-v7-reference#setlang)
    # query parameter are mutually exclusive; do not specify both. If you set this
    # header, you must also specify the
    # [cc](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-video-api-v7-reference#cc)
    # query parameter. To determine the market to return results for, Bing uses the
    # first supported language it finds from the list and combines it with the cc
    # parameter value. If the list does not include a supported language, Bing
    # finds the closest language and market that supports the request or it uses an
    # aggregated or default market for the results. To determine the market that
    # Bing used, see the BingAPIs-Market header. Use this header and the cc query
    # parameter only if you specify multiple languages. Otherwise, use the
    # [mkt](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-video-api-v7-reference#mkt)
    # and
    # [setLang](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-video-api-v7-reference#setlang)
    # query parameters. A user interface string is a string that's used as a label
    # in a user interface. There are few user interface strings in the JSON
    # response objects. Any links to Bing.com properties in the response objects
    # apply the specified language.
    # @param user_agent [String] The user agent originating the request. Bing uses
    # the user agent to provide mobile users with an optimized experience. Although
    # optional, you are encouraged to always specify this header. The user-agent
    # should be the same string that any commonly used browser sends. For
    # information about user agents, see [RFC
    # 2616](http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html). The following
    # are examples of user-agent strings. Windows Phone: Mozilla/5.0 (compatible;
    # MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA;
    # Lumia 822). Android: Mozilla / 5.0 (Linux; U; Android 2.3.5; en - us; SCH -
    # I500 Build / GINGERBREAD) AppleWebKit / 533.1 (KHTML; like Gecko) Version /
    # 4.0 Mobile Safari / 533.1. iPhone: Mozilla / 5.0 (iPhone; CPU iPhone OS 6_1
    # like Mac OS X) AppleWebKit / 536.26 (KHTML; like Gecko) Mobile / 10B142
    # iPhone4; 1 BingWeb / 3.03.1428.20120423. PC: Mozilla / 5.0 (Windows NT 6.3;
    # WOW64; Trident / 7.0; Touch; rv:11.0) like Gecko. iPad: Mozilla / 5.0 (iPad;
    # CPU OS 7_0 like Mac OS X) AppleWebKit / 537.51.1 (KHTML, like Gecko) Version
    # / 7.0 Mobile / 11A465 Safari / 9537.53
    # @param client_id [String] Bing uses this header to provide users with
    # consistent behavior across Bing API calls. Bing often flights new features
    # and improvements, and it uses the client ID as a key for assigning traffic on
    # different flights. If you do not use the same client ID for a user across
    # multiple requests, then Bing may assign the user to multiple conflicting
    # flights. Being assigned to multiple conflicting flights can lead to an
    # inconsistent user experience. For example, if the second request has a
    # different flight assignment than the first, the experience may be unexpected.
    # Also, Bing can use the client ID to tailor web results to that client ID’s
    # search history, providing a richer experience for the user. Bing also uses
    # this header to help improve result rankings by analyzing the activity
    # generated by a client ID. The relevance improvements help with better quality
    # of results delivered by Bing APIs and in turn enables higher click-through
    # rates for the API consumer. IMPORTANT: Although optional, you should consider
    # this header required. Persisting the client ID across multiple requests for
    # the same end user and device combination enables 1) the API consumer to
    # receive a consistent user experience, and 2) higher click-through rates via
    # better quality of results from the Bing APIs. Each user that uses your
    # application on the device must have a unique, Bing generated client ID. If
    # you do not include this header in the request, Bing generates an ID and
    # returns it in the X-MSEdge-ClientID response header. The only time that you
    # should NOT include this header in a request is the first time the user uses
    # your app on that device. Use the client ID for each Bing API request that
    # your app makes for this user on the device. Persist the client ID. To persist
    # the ID in a browser app, use a persistent HTTP cookie to ensure the ID is
    # used across all sessions. Do not use a session cookie. For other apps such as
    # mobile apps, use the device's persistent storage to persist the ID. The next
    # time the user uses your app on that device, get the client ID that you
    # persisted. Bing responses may or may not include this header. If the response
    # includes this header, capture the client ID and use it for all subsequent
    # Bing requests for the user on that device. If you include the
    # X-MSEdge-ClientID, you must not include cookies in the request.
    # @param client_ip [String] The IPv4 or IPv6 address of the client device. The
    # IP address is used to discover the user's location. Bing uses the location
    # information to determine safe search behavior. Although optional, you are
    # encouraged to always specify this header and the X-Search-Location header. Do
    # not obfuscate the address (for example, by changing the last octet to 0).
    # Obfuscating the address results in the location not being anywhere near the
    # device's actual location, which may result in Bing serving erroneous results.
    # @param location [String] A semicolon-delimited list of key/value pairs that
    # describe the client's geographical location. Bing uses the location
    # information to determine safe search behavior and to return relevant local
    # content. Specify the key/value pair as <key>:<value>. The following are the
    # keys that you use to specify the user's location. lat (required): The
    # latitude of the client's location, in degrees. The latitude must be greater
    # than or equal to -90.0 and less than or equal to +90.0. Negative values
    # indicate southern latitudes and positive values indicate northern latitudes.
    # long (required): The longitude of the client's location, in degrees. The
    # longitude must be greater than or equal to -180.0 and less than or equal to
    # +180.0. Negative values indicate western longitudes and positive values
    # indicate eastern longitudes. re (required): The radius, in meters, which
    # specifies the horizontal accuracy of the coordinates. Pass the value returned
    # by the device's location service. Typical values might be 22m for GPS/Wi-Fi,
    # 380m for cell tower triangulation, and 18,000m for reverse IP lookup. ts
    # (optional): The UTC UNIX timestamp of when the client was at the location.
    # (The UNIX timestamp is the number of seconds since January 1, 1970.) head
    # (optional): The client's relative heading or direction of travel. Specify the
    # direction of travel as degrees from 0 through 360, counting clockwise
    # relative to true north. Specify this key only if the sp key is nonzero. sp
    # (optional): The horizontal velocity (speed), in meters per second, that the
    # client device is traveling. alt (optional): The altitude of the client
    # device, in meters. are (optional): The radius, in meters, that specifies the
    # vertical accuracy of the coordinates. Specify this key only if you specify
    # the alt key. Although many of the keys are optional, the more information
    # that you provide, the more accurate the location results are. Although
    # optional, you are encouraged to always specify the user's geographical
    # location. Providing the location is especially important if the client's IP
    # address does not accurately reflect the user's physical location (for
    # example, if the client uses VPN). For optimal results, you should include
    # this header and the X-MSEdge-ClientIP header, but at a minimum, you should
    # include this header.
    # @param country_code [String] A 2-character country code of the country where
    # the results come from. This API supports only the United States market. If
    # you specify this query parameter, it must be set to us. If you set this
    # parameter, you must also specify the Accept-Language header. Bing uses the
    # first supported language it finds from the languages list, and combine that
    # language with the country code that you specify to determine the market to
    # return results for. If the languages list does not include a supported
    # language, Bing finds the closest language and market that supports the
    # request, or it may use an aggregated or default market for the results
    # instead of a specified one. You should use this query parameter and the
    # Accept-Language query parameter only if you specify multiple languages;
    # otherwise, you should use the mkt and setLang query parameters. This
    # parameter and the mkt query parameter are mutually exclusive—do not specify
    # both.
    # @param market [String] The market where the results come from. Typically, mkt
    # is the country where the user is making the request from. However, it could
    # be a different country if the user is not located in a country where Bing
    # delivers results. The market must be in the form <language code>-<country
    # code>. For example, en-US. The string is case insensitive. For a list of
    # possible market values, see [Market
    # Codes](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-video-api-v7-reference#market-codes).
    # NOTE: If known, you are encouraged to always specify the market. Specifying
    # the market helps Bing route the request and return an appropriate and optimal
    # response. If you specify a market that is not listed in [Market
    # Codes](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-video-api-v7-reference#market-codes),
    # Bing uses a best fit market code based on an internal mapping that is subject
    # to change. This parameter and the
    # [cc](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-video-api-v7-reference#cc)
    # query parameter are mutually exclusive—do not specify both.
    # @param safe_search [SafeSearch] Filter videos for adult content. The
    # following are the possible filter values. Off: If the request is through the
    # Video Search API, the response includes adult videos and the thumbnail images
    # of the videos are clear (non-fuzzy). If the request is through the Web Search
    # API, the response includes adult videos but the thumbnail images of the
    # videos are pixelated (fuzzy). Moderate: If the request is through the Video
    # Search API, the response does not include videos with adult content. If the
    # request is through the Web Search API, the response may include videos with
    # adult content but the thumbnail images of the videos are pixelated (fuzzy).
    # Strict: Does not return videos with adult content. The default is Moderate.
    # If the request comes from a market that Bing's adult policy requires that
    # safeSearch is set to Strict, Bing ignores the safeSearch value and uses
    # Strict. If you use the site: query operator, there is the chance that the
    # response may contain adult content regardless of what the safeSearch query
    # parameter is set to. Use site: only if you are aware of the content on the
    # site and your scenario supports the possibility of adult content. Possible
    # values include: 'Off', 'Moderate', 'Strict'
    # @param set_lang [String] The language to use for user interface strings.
    # Specify the language using the ISO 639-1 2-letter language code. For example,
    # the language code for English is EN. The default is EN (English). Although
    # optional, you should always specify the language. Typically, you set setLang
    # to the same language specified by mkt unless the user wants the user
    # interface strings displayed in a different language. This parameter and the
    # [Accept-Language](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-video-api-v7-reference#acceptlanguage)
    # header are mutually exclusive; do not specify both. A user interface string
    # is a string that's used as a label in a user interface. There are few user
    # interface strings in the JSON response objects. Also, any links to Bing.com
    # properties in the response objects apply the specified language.
    # @param text_decorations [Boolean] A Boolean value that determines whether
    # display strings contain decoration markers such as hit highlighting
    # characters. If true, the strings may include markers. The default is false.
    # To specify whether to use Unicode characters or HTML tags as the markers, see
    # the
    # [textFormat](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-video-api-v7-reference#textformat)
    # query parameter. For information about hit highlighting, see [Hit
    # Highlighting](https://docs.microsoft.com/azure/cognitive-services/bing-news-search/hit-highlighting).
    # @param text_format [TextFormat] The type of markers to use for text
    # decorations (see the textDecorations query parameter). Possible values are
    # Raw—Use Unicode characters to mark content that needs special formatting. The
    # Unicode characters are in the range E000 through E019. For example, Bing uses
    # E000 and E001 to mark the beginning and end of query terms for hit
    # highlighting. HTML—Use HTML tags to mark content that needs special
    # formatting. For example, use <b> tags to highlight query terms in display
    # strings. The default is Raw. For display strings that contain escapable HTML
    # characters such as <, >, and &, if textFormat is set to HTML, Bing escapes
    # the characters as appropriate (for example, < is escaped to &lt;). Possible
    # values include: 'Raw', 'Html'
    # @param custom_headers [Hash{String => String}] A hash of custom headers that
    # will be added to the HTTP request.
    #
    # @return [TrendingVideos] operation results.
    #
    def trending(accept_language:nil, user_agent:nil, client_id:nil, client_ip:nil, location:nil, country_code:nil, market:nil, safe_search:nil, set_lang:nil, text_decorations:nil, text_format:nil, custom_headers:nil)
      response = trending_async(accept_language:accept_language, user_agent:user_agent, client_id:client_id, client_ip:client_ip, location:location, country_code:country_code, market:market, safe_search:safe_search, set_lang:set_lang, text_decorations:text_decorations, text_format:text_format, custom_headers:custom_headers).value!
      response.body unless response.nil?
    end

    #
    # The Video Trending Search API lets you search on Bing and get back a list of
    # videos that are trending based on search requests made by others. The videos
    # are broken out into different categories. For example, Top Music Videos. For
    # a list of markets that support trending videos, see [Trending
    # Videos](https://docs.microsoft.com/azure/cognitive-services/bing-video-search/trending-videos).
    #
    # @param accept_language [String] A comma-delimited list of one or more
    # languages to use for user interface strings. The list is in decreasing order
    # of preference. For additional information, including expected format, see
    # [RFC2616](http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html). This
    # header and the
    # [setLang](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-video-api-v7-reference#setlang)
    # query parameter are mutually exclusive; do not specify both. If you set this
    # header, you must also specify the
    # [cc](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-video-api-v7-reference#cc)
    # query parameter. To determine the market to return results for, Bing uses the
    # first supported language it finds from the list and combines it with the cc
    # parameter value. If the list does not include a supported language, Bing
    # finds the closest language and market that supports the request or it uses an
    # aggregated or default market for the results. To determine the market that
    # Bing used, see the BingAPIs-Market header. Use this header and the cc query
    # parameter only if you specify multiple languages. Otherwise, use the
    # [mkt](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-video-api-v7-reference#mkt)
    # and
    # [setLang](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-video-api-v7-reference#setlang)
    # query parameters. A user interface string is a string that's used as a label
    # in a user interface. There are few user interface strings in the JSON
    # response objects. Any links to Bing.com properties in the response objects
    # apply the specified language.
    # @param user_agent [String] The user agent originating the request. Bing uses
    # the user agent to provide mobile users with an optimized experience. Although
    # optional, you are encouraged to always specify this header. The user-agent
    # should be the same string that any commonly used browser sends. For
    # information about user agents, see [RFC
    # 2616](http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html). The following
    # are examples of user-agent strings. Windows Phone: Mozilla/5.0 (compatible;
    # MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA;
    # Lumia 822). Android: Mozilla / 5.0 (Linux; U; Android 2.3.5; en - us; SCH -
    # I500 Build / GINGERBREAD) AppleWebKit / 533.1 (KHTML; like Gecko) Version /
    # 4.0 Mobile Safari / 533.1. iPhone: Mozilla / 5.0 (iPhone; CPU iPhone OS 6_1
    # like Mac OS X) AppleWebKit / 536.26 (KHTML; like Gecko) Mobile / 10B142
    # iPhone4; 1 BingWeb / 3.03.1428.20120423. PC: Mozilla / 5.0 (Windows NT 6.3;
    # WOW64; Trident / 7.0; Touch; rv:11.0) like Gecko. iPad: Mozilla / 5.0 (iPad;
    # CPU OS 7_0 like Mac OS X) AppleWebKit / 537.51.1 (KHTML, like Gecko) Version
    # / 7.0 Mobile / 11A465 Safari / 9537.53
    # @param client_id [String] Bing uses this header to provide users with
    # consistent behavior across Bing API calls. Bing often flights new features
    # and improvements, and it uses the client ID as a key for assigning traffic on
    # different flights. If you do not use the same client ID for a user across
    # multiple requests, then Bing may assign the user to multiple conflicting
    # flights. Being assigned to multiple conflicting flights can lead to an
    # inconsistent user experience. For example, if the second request has a
    # different flight assignment than the first, the experience may be unexpected.
    # Also, Bing can use the client ID to tailor web results to that client ID’s
    # search history, providing a richer experience for the user. Bing also uses
    # this header to help improve result rankings by analyzing the activity
    # generated by a client ID. The relevance improvements help with better quality
    # of results delivered by Bing APIs and in turn enables higher click-through
    # rates for the API consumer. IMPORTANT: Although optional, you should consider
    # this header required. Persisting the client ID across multiple requests for
    # the same end user and device combination enables 1) the API consumer to
    # receive a consistent user experience, and 2) higher click-through rates via
    # better quality of results from the Bing APIs. Each user that uses your
    # application on the device must have a unique, Bing generated client ID. If
    # you do not include this header in the request, Bing generates an ID and
    # returns it in the X-MSEdge-ClientID response header. The only time that you
    # should NOT include this header in a request is the first time the user uses
    # your app on that device. Use the client ID for each Bing API request that
    # your app makes for this user on the device. Persist the client ID. To persist
    # the ID in a browser app, use a persistent HTTP cookie to ensure the ID is
    # used across all sessions. Do not use a session cookie. For other apps such as
    # mobile apps, use the device's persistent storage to persist the ID. The next
    # time the user uses your app on that device, get the client ID that you
    # persisted. Bing responses may or may not include this header. If the response
    # includes this header, capture the client ID and use it for all subsequent
    # Bing requests for the user on that device. If you include the
    # X-MSEdge-ClientID, you must not include cookies in the request.
    # @param client_ip [String] The IPv4 or IPv6 address of the client device. The
    # IP address is used to discover the user's location. Bing uses the location
    # information to determine safe search behavior. Although optional, you are
    # encouraged to always specify this header and the X-Search-Location header. Do
    # not obfuscate the address (for example, by changing the last octet to 0).
    # Obfuscating the address results in the location not being anywhere near the
    # device's actual location, which may result in Bing serving erroneous results.
    # @param location [String] A semicolon-delimited list of key/value pairs that
    # describe the client's geographical location. Bing uses the location
    # information to determine safe search behavior and to return relevant local
    # content. Specify the key/value pair as <key>:<value>. The following are the
    # keys that you use to specify the user's location. lat (required): The
    # latitude of the client's location, in degrees. The latitude must be greater
    # than or equal to -90.0 and less than or equal to +90.0. Negative values
    # indicate southern latitudes and positive values indicate northern latitudes.
    # long (required): The longitude of the client's location, in degrees. The
    # longitude must be greater than or equal to -180.0 and less than or equal to
    # +180.0. Negative values indicate western longitudes and positive values
    # indicate eastern longitudes. re (required): The radius, in meters, which
    # specifies the horizontal accuracy of the coordinates. Pass the value returned
    # by the device's location service. Typical values might be 22m for GPS/Wi-Fi,
    # 380m for cell tower triangulation, and 18,000m for reverse IP lookup. ts
    # (optional): The UTC UNIX timestamp of when the client was at the location.
    # (The UNIX timestamp is the number of seconds since January 1, 1970.) head
    # (optional): The client's relative heading or direction of travel. Specify the
    # direction of travel as degrees from 0 through 360, counting clockwise
    # relative to true north. Specify this key only if the sp key is nonzero. sp
    # (optional): The horizontal velocity (speed), in meters per second, that the
    # client device is traveling. alt (optional): The altitude of the client
    # device, in meters. are (optional): The radius, in meters, that specifies the
    # vertical accuracy of the coordinates. Specify this key only if you specify
    # the alt key. Although many of the keys are optional, the more information
    # that you provide, the more accurate the location results are. Although
    # optional, you are encouraged to always specify the user's geographical
    # location. Providing the location is especially important if the client's IP
    # address does not accurately reflect the user's physical location (for
    # example, if the client uses VPN). For optimal results, you should include
    # this header and the X-MSEdge-ClientIP header, but at a minimum, you should
    # include this header.
    # @param country_code [String] A 2-character country code of the country where
    # the results come from. This API supports only the United States market. If
    # you specify this query parameter, it must be set to us. If you set this
    # parameter, you must also specify the Accept-Language header. Bing uses the
    # first supported language it finds from the languages list, and combine that
    # language with the country code that you specify to determine the market to
    # return results for. If the languages list does not include a supported
    # language, Bing finds the closest language and market that supports the
    # request, or it may use an aggregated or default market for the results
    # instead of a specified one. You should use this query parameter and the
    # Accept-Language query parameter only if you specify multiple languages;
    # otherwise, you should use the mkt and setLang query parameters. This
    # parameter and the mkt query parameter are mutually exclusive—do not specify
    # both.
    # @param market [String] The market where the results come from. Typically, mkt
    # is the country where the user is making the request from. However, it could
    # be a different country if the user is not located in a country where Bing
    # delivers results. The market must be in the form <language code>-<country
    # code>. For example, en-US. The string is case insensitive. For a list of
    # possible market values, see [Market
    # Codes](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-video-api-v7-reference#market-codes).
    # NOTE: If known, you are encouraged to always specify the market. Specifying
    # the market helps Bing route the request and return an appropriate and optimal
    # response. If you specify a market that is not listed in [Market
    # Codes](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-video-api-v7-reference#market-codes),
    # Bing uses a best fit market code based on an internal mapping that is subject
    # to change. This parameter and the
    # [cc](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-video-api-v7-reference#cc)
    # query parameter are mutually exclusive—do not specify both.
    # @param safe_search [SafeSearch] Filter videos for adult content. The
    # following are the possible filter values. Off: If the request is through the
    # Video Search API, the response includes adult videos and the thumbnail images
    # of the videos are clear (non-fuzzy). If the request is through the Web Search
    # API, the response includes adult videos but the thumbnail images of the
    # videos are pixelated (fuzzy). Moderate: If the request is through the Video
    # Search API, the response does not include videos with adult content. If the
    # request is through the Web Search API, the response may include videos with
    # adult content but the thumbnail images of the videos are pixelated (fuzzy).
    # Strict: Does not return videos with adult content. The default is Moderate.
    # If the request comes from a market that Bing's adult policy requires that
    # safeSearch is set to Strict, Bing ignores the safeSearch value and uses
    # Strict. If you use the site: query operator, there is the chance that the
    # response may contain adult content regardless of what the safeSearch query
    # parameter is set to. Use site: only if you are aware of the content on the
    # site and your scenario supports the possibility of adult content. Possible
    # values include: 'Off', 'Moderate', 'Strict'
    # @param set_lang [String] The language to use for user interface strings.
    # Specify the language using the ISO 639-1 2-letter language code. For example,
    # the language code for English is EN. The default is EN (English). Although
    # optional, you should always specify the language. Typically, you set setLang
    # to the same language specified by mkt unless the user wants the user
    # interface strings displayed in a different language. This parameter and the
    # [Accept-Language](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-video-api-v7-reference#acceptlanguage)
    # header are mutually exclusive; do not specify both. A user interface string
    # is a string that's used as a label in a user interface. There are few user
    # interface strings in the JSON response objects. Also, any links to Bing.com
    # properties in the response objects apply the specified language.
    # @param text_decorations [Boolean] A Boolean value that determines whether
    # display strings contain decoration markers such as hit highlighting
    # characters. If true, the strings may include markers. The default is false.
    # To specify whether to use Unicode characters or HTML tags as the markers, see
    # the
    # [textFormat](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-video-api-v7-reference#textformat)
    # query parameter. For information about hit highlighting, see [Hit
    # Highlighting](https://docs.microsoft.com/azure/cognitive-services/bing-news-search/hit-highlighting).
    # @param text_format [TextFormat] The type of markers to use for text
    # decorations (see the textDecorations query parameter). Possible values are
    # Raw—Use Unicode characters to mark content that needs special formatting. The
    # Unicode characters are in the range E000 through E019. For example, Bing uses
    # E000 and E001 to mark the beginning and end of query terms for hit
    # highlighting. HTML—Use HTML tags to mark content that needs special
    # formatting. For example, use <b> tags to highlight query terms in display
    # strings. The default is Raw. For display strings that contain escapable HTML
    # characters such as <, >, and &, if textFormat is set to HTML, Bing escapes
    # the characters as appropriate (for example, < is escaped to &lt;). Possible
    # values include: 'Raw', 'Html'
    # @param custom_headers [Hash{String => String}] A hash of custom headers that
    # will be added to the HTTP request.
    #
    # @return [MsRestAzure::AzureOperationResponse] HTTP response information.
    #
    def trending_with_http_info(accept_language:nil, user_agent:nil, client_id:nil, client_ip:nil, location:nil, country_code:nil, market:nil, safe_search:nil, set_lang:nil, text_decorations:nil, text_format:nil, custom_headers:nil)
      trending_async(accept_language:accept_language, user_agent:user_agent, client_id:client_id, client_ip:client_ip, location:location, country_code:country_code, market:market, safe_search:safe_search, set_lang:set_lang, text_decorations:text_decorations, text_format:text_format, custom_headers:custom_headers).value!
    end

    #
    # The Video Trending Search API lets you search on Bing and get back a list of
    # videos that are trending based on search requests made by others. The videos
    # are broken out into different categories. For example, Top Music Videos. For
    # a list of markets that support trending videos, see [Trending
    # Videos](https://docs.microsoft.com/azure/cognitive-services/bing-video-search/trending-videos).
    #
    # @param accept_language [String] A comma-delimited list of one or more
    # languages to use for user interface strings. The list is in decreasing order
    # of preference. For additional information, including expected format, see
    # [RFC2616](http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html). This
    # header and the
    # [setLang](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-video-api-v7-reference#setlang)
    # query parameter are mutually exclusive; do not specify both. If you set this
    # header, you must also specify the
    # [cc](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-video-api-v7-reference#cc)
    # query parameter. To determine the market to return results for, Bing uses the
    # first supported language it finds from the list and combines it with the cc
    # parameter value. If the list does not include a supported language, Bing
    # finds the closest language and market that supports the request or it uses an
    # aggregated or default market for the results. To determine the market that
    # Bing used, see the BingAPIs-Market header. Use this header and the cc query
    # parameter only if you specify multiple languages. Otherwise, use the
    # [mkt](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-video-api-v7-reference#mkt)
    # and
    # [setLang](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-video-api-v7-reference#setlang)
    # query parameters. A user interface string is a string that's used as a label
    # in a user interface. There are few user interface strings in the JSON
    # response objects. Any links to Bing.com properties in the response objects
    # apply the specified language.
    # @param user_agent [String] The user agent originating the request. Bing uses
    # the user agent to provide mobile users with an optimized experience. Although
    # optional, you are encouraged to always specify this header. The user-agent
    # should be the same string that any commonly used browser sends. For
    # information about user agents, see [RFC
    # 2616](http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html). The following
    # are examples of user-agent strings. Windows Phone: Mozilla/5.0 (compatible;
    # MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA;
    # Lumia 822). Android: Mozilla / 5.0 (Linux; U; Android 2.3.5; en - us; SCH -
    # I500 Build / GINGERBREAD) AppleWebKit / 533.1 (KHTML; like Gecko) Version /
    # 4.0 Mobile Safari / 533.1. iPhone: Mozilla / 5.0 (iPhone; CPU iPhone OS 6_1
    # like Mac OS X) AppleWebKit / 536.26 (KHTML; like Gecko) Mobile / 10B142
    # iPhone4; 1 BingWeb / 3.03.1428.20120423. PC: Mozilla / 5.0 (Windows NT 6.3;
    # WOW64; Trident / 7.0; Touch; rv:11.0) like Gecko. iPad: Mozilla / 5.0 (iPad;
    # CPU OS 7_0 like Mac OS X) AppleWebKit / 537.51.1 (KHTML, like Gecko) Version
    # / 7.0 Mobile / 11A465 Safari / 9537.53
    # @param client_id [String] Bing uses this header to provide users with
    # consistent behavior across Bing API calls. Bing often flights new features
    # and improvements, and it uses the client ID as a key for assigning traffic on
    # different flights. If you do not use the same client ID for a user across
    # multiple requests, then Bing may assign the user to multiple conflicting
    # flights. Being assigned to multiple conflicting flights can lead to an
    # inconsistent user experience. For example, if the second request has a
    # different flight assignment than the first, the experience may be unexpected.
    # Also, Bing can use the client ID to tailor web results to that client ID’s
    # search history, providing a richer experience for the user. Bing also uses
    # this header to help improve result rankings by analyzing the activity
    # generated by a client ID. The relevance improvements help with better quality
    # of results delivered by Bing APIs and in turn enables higher click-through
    # rates for the API consumer. IMPORTANT: Although optional, you should consider
    # this header required. Persisting the client ID across multiple requests for
    # the same end user and device combination enables 1) the API consumer to
    # receive a consistent user experience, and 2) higher click-through rates via
    # better quality of results from the Bing APIs. Each user that uses your
    # application on the device must have a unique, Bing generated client ID. If
    # you do not include this header in the request, Bing generates an ID and
    # returns it in the X-MSEdge-ClientID response header. The only time that you
    # should NOT include this header in a request is the first time the user uses
    # your app on that device. Use the client ID for each Bing API request that
    # your app makes for this user on the device. Persist the client ID. To persist
    # the ID in a browser app, use a persistent HTTP cookie to ensure the ID is
    # used across all sessions. Do not use a session cookie. For other apps such as
    # mobile apps, use the device's persistent storage to persist the ID. The next
    # time the user uses your app on that device, get the client ID that you
    # persisted. Bing responses may or may not include this header. If the response
    # includes this header, capture the client ID and use it for all subsequent
    # Bing requests for the user on that device. If you include the
    # X-MSEdge-ClientID, you must not include cookies in the request.
    # @param client_ip [String] The IPv4 or IPv6 address of the client device. The
    # IP address is used to discover the user's location. Bing uses the location
    # information to determine safe search behavior. Although optional, you are
    # encouraged to always specify this header and the X-Search-Location header. Do
    # not obfuscate the address (for example, by changing the last octet to 0).
    # Obfuscating the address results in the location not being anywhere near the
    # device's actual location, which may result in Bing serving erroneous results.
    # @param location [String] A semicolon-delimited list of key/value pairs that
    # describe the client's geographical location. Bing uses the location
    # information to determine safe search behavior and to return relevant local
    # content. Specify the key/value pair as <key>:<value>. The following are the
    # keys that you use to specify the user's location. lat (required): The
    # latitude of the client's location, in degrees. The latitude must be greater
    # than or equal to -90.0 and less than or equal to +90.0. Negative values
    # indicate southern latitudes and positive values indicate northern latitudes.
    # long (required): The longitude of the client's location, in degrees. The
    # longitude must be greater than or equal to -180.0 and less than or equal to
    # +180.0. Negative values indicate western longitudes and positive values
    # indicate eastern longitudes. re (required): The radius, in meters, which
    # specifies the horizontal accuracy of the coordinates. Pass the value returned
    # by the device's location service. Typical values might be 22m for GPS/Wi-Fi,
    # 380m for cell tower triangulation, and 18,000m for reverse IP lookup. ts
    # (optional): The UTC UNIX timestamp of when the client was at the location.
    # (The UNIX timestamp is the number of seconds since January 1, 1970.) head
    # (optional): The client's relative heading or direction of travel. Specify the
    # direction of travel as degrees from 0 through 360, counting clockwise
    # relative to true north. Specify this key only if the sp key is nonzero. sp
    # (optional): The horizontal velocity (speed), in meters per second, that the
    # client device is traveling. alt (optional): The altitude of the client
    # device, in meters. are (optional): The radius, in meters, that specifies the
    # vertical accuracy of the coordinates. Specify this key only if you specify
    # the alt key. Although many of the keys are optional, the more information
    # that you provide, the more accurate the location results are. Although
    # optional, you are encouraged to always specify the user's geographical
    # location. Providing the location is especially important if the client's IP
    # address does not accurately reflect the user's physical location (for
    # example, if the client uses VPN). For optimal results, you should include
    # this header and the X-MSEdge-ClientIP header, but at a minimum, you should
    # include this header.
    # @param country_code [String] A 2-character country code of the country where
    # the results come from. This API supports only the United States market. If
    # you specify this query parameter, it must be set to us. If you set this
    # parameter, you must also specify the Accept-Language header. Bing uses the
    # first supported language it finds from the languages list, and combine that
    # language with the country code that you specify to determine the market to
    # return results for. If the languages list does not include a supported
    # language, Bing finds the closest language and market that supports the
    # request, or it may use an aggregated or default market for the results
    # instead of a specified one. You should use this query parameter and the
    # Accept-Language query parameter only if you specify multiple languages;
    # otherwise, you should use the mkt and setLang query parameters. This
    # parameter and the mkt query parameter are mutually exclusive—do not specify
    # both.
    # @param market [String] The market where the results come from. Typically, mkt
    # is the country where the user is making the request from. However, it could
    # be a different country if the user is not located in a country where Bing
    # delivers results. The market must be in the form <language code>-<country
    # code>. For example, en-US. The string is case insensitive. For a list of
    # possible market values, see [Market
    # Codes](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-video-api-v7-reference#market-codes).
    # NOTE: If known, you are encouraged to always specify the market. Specifying
    # the market helps Bing route the request and return an appropriate and optimal
    # response. If you specify a market that is not listed in [Market
    # Codes](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-video-api-v7-reference#market-codes),
    # Bing uses a best fit market code based on an internal mapping that is subject
    # to change. This parameter and the
    # [cc](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-video-api-v7-reference#cc)
    # query parameter are mutually exclusive—do not specify both.
    # @param safe_search [SafeSearch] Filter videos for adult content. The
    # following are the possible filter values. Off: If the request is through the
    # Video Search API, the response includes adult videos and the thumbnail images
    # of the videos are clear (non-fuzzy). If the request is through the Web Search
    # API, the response includes adult videos but the thumbnail images of the
    # videos are pixelated (fuzzy). Moderate: If the request is through the Video
    # Search API, the response does not include videos with adult content. If the
    # request is through the Web Search API, the response may include videos with
    # adult content but the thumbnail images of the videos are pixelated (fuzzy).
    # Strict: Does not return videos with adult content. The default is Moderate.
    # If the request comes from a market that Bing's adult policy requires that
    # safeSearch is set to Strict, Bing ignores the safeSearch value and uses
    # Strict. If you use the site: query operator, there is the chance that the
    # response may contain adult content regardless of what the safeSearch query
    # parameter is set to. Use site: only if you are aware of the content on the
    # site and your scenario supports the possibility of adult content. Possible
    # values include: 'Off', 'Moderate', 'Strict'
    # @param set_lang [String] The language to use for user interface strings.
    # Specify the language using the ISO 639-1 2-letter language code. For example,
    # the language code for English is EN. The default is EN (English). Although
    # optional, you should always specify the language. Typically, you set setLang
    # to the same language specified by mkt unless the user wants the user
    # interface strings displayed in a different language. This parameter and the
    # [Accept-Language](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-video-api-v7-reference#acceptlanguage)
    # header are mutually exclusive; do not specify both. A user interface string
    # is a string that's used as a label in a user interface. There are few user
    # interface strings in the JSON response objects. Also, any links to Bing.com
    # properties in the response objects apply the specified language.
    # @param text_decorations [Boolean] A Boolean value that determines whether
    # display strings contain decoration markers such as hit highlighting
    # characters. If true, the strings may include markers. The default is false.
    # To specify whether to use Unicode characters or HTML tags as the markers, see
    # the
    # [textFormat](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-video-api-v7-reference#textformat)
    # query parameter. For information about hit highlighting, see [Hit
    # Highlighting](https://docs.microsoft.com/azure/cognitive-services/bing-news-search/hit-highlighting).
    # @param text_format [TextFormat] The type of markers to use for text
    # decorations (see the textDecorations query parameter). Possible values are
    # Raw—Use Unicode characters to mark content that needs special formatting. The
    # Unicode characters are in the range E000 through E019. For example, Bing uses
    # E000 and E001 to mark the beginning and end of query terms for hit
    # highlighting. HTML—Use HTML tags to mark content that needs special
    # formatting. For example, use <b> tags to highlight query terms in display
    # strings. The default is Raw. For display strings that contain escapable HTML
    # characters such as <, >, and &, if textFormat is set to HTML, Bing escapes
    # the characters as appropriate (for example, < is escaped to &lt;). Possible
    # values include: 'Raw', 'Html'
    # @param [Hash{String => String}] A hash of custom headers that will be added
    # to the HTTP request.
    #
    # @return [Concurrent::Promise] Promise object which holds the HTTP response.
    #
    def trending_async(accept_language:nil, user_agent:nil, client_id:nil, client_ip:nil, location:nil, country_code:nil, market:nil, safe_search:nil, set_lang:nil, text_decorations:nil, text_format:nil, custom_headers:nil)
      fail ArgumentError, '@client.endpoint is nil' if @client.endpoint.nil?
      x_bing_apis_sdk = 'true'


      request_headers = {}
      request_headers['Content-Type'] = 'application/json; charset=utf-8'

      # Set Headers
      request_headers['x-ms-client-request-id'] = SecureRandom.uuid
      request_headers['X-BingApis-SDK'] = x_bing_apis_sdk unless x_bing_apis_sdk.nil?
      request_headers['Accept-Language'] = accept_language unless accept_language.nil?
      request_headers['User-Agent'] = user_agent unless user_agent.nil?
      request_headers['X-MSEdge-ClientID'] = client_id unless client_id.nil?
      request_headers['X-MSEdge-ClientIP'] = client_ip unless client_ip.nil?
      request_headers['X-Search-Location'] = location unless location.nil?
      path_template = 'videos/trending'

      request_url = @base_url || @client.base_url
    request_url = request_url.gsub('{Endpoint}', @client.endpoint)

      options = {
          middlewares: [[MsRest::RetryPolicyMiddleware, times: 3, retry: 0.02], [:cookie_jar]],
          query_params: {'cc' => country_code,'mkt' => market,'safeSearch' => safe_search,'setLang' => set_lang,'textDecorations' => text_decorations,'textFormat' => text_format},
          headers: request_headers.merge(custom_headers || {}),
          base_url: request_url
      }
      promise = @client.make_request_async(:get, path_template, options)

      promise = promise.then do |result|
        http_response = result.response
        status_code = http_response.status
        response_content = http_response.body
        unless status_code == 200
          error_model = JSON.load(response_content)
          fail MsRest::HttpOperationError.new(result.request, http_response, error_model)
        end

        result.request_id = http_response['x-ms-request-id'] unless http_response['x-ms-request-id'].nil?
        # Deserialize Response
        if status_code == 200
          begin
            parsed_response = response_content.to_s.empty? ? nil : JSON.load(response_content)
            result_mapper = Azure::CognitiveServices::VideoSearch::V1_0::Models::TrendingVideos.mapper()
            result.body = @client.deserialize(result_mapper, parsed_response)
          rescue Exception => e
            fail MsRest::DeserializationError.new('Error occurred in deserializing the response', e.message, e.backtrace, result)
          end
        end

        result
      end

      promise.execute
    end

  end
end
