defmodule ExAws.Timestream.Query do @namespace "Timestream_20181101" @moduledoc """ The following actions are supported by Amazon Timestream Query. https://docs.aws.amazon.com/timestream/latest/developerguide/API_Operations_Amazon_Timestream_Query.html """ @doc "DescribeEndpoints returns a list of available endpoints to make Timestream API calls against" @spec describe_endpoints() :: ExAws.Operation.JSON.t() def describe_endpoints do endpoint_operation() end @doc "Cancels a query that has been issued." @spec cancel_query(query_id :: binary) :: ExAws.Operation.EndpointDiscovery.t() def cancel_query(query_id) do request(:describe_endpoints, %{ "QueryId" => query_id }) |> dynamic_endpoint_request() end @doc "Query is a synchronous operation that enables you to execute a query." @type query_opts :: [ {:max_rows, pos_integer} | {:next_token, binary} | {:client_token, binary} ] @spec query(query_string :: binary) :: ExAws.Operation.EndpointDiscovery.t() @spec query(query_string :: binary, query_opts :: query_opts) :: ExAws.Operation.EndpointDiscovery.t() def query(query_string, opts \\ []) do request(:query, %{ "ClientToken" => Keyword.get(opts, :client_token, nil), "MaxRows" => Keyword.get(opts, :max_rows, nil), "NextToken" => Keyword.get(opts, :next_token, nil), "QueryString" => query_string }) |> dynamic_endpoint_request() end defp request(op, data) do operation = op |> Atom.to_string() |> Macro.camelize() %ExAws.Operation.JSON{ http_method: :post, service: :query_timestream, data: data, headers: [ {"x-amz-target", "#{@namespace}.#{operation}"}, {"content-type", "application/x-amz-json-1.0"} ] } end defp dynamic_endpoint_request(request_op, endpoint_op \\ endpoint_operation()) do ExAws.Operation.EndpointDiscovery.new(:query_timestream, request_operation: request_op, endpoint_operation: endpoint_op ) end defp endpoint_operation() do request(:describe_endpoints, %{}) end end