defmodule ExAws.Operation.Query do @moduledoc """ Datastructure representing an operation on a Query based AWS service These include: - SQS - SNS - SES """ defstruct path: "/", params: %{}, content_encoding: "identity", service: nil, action: nil, parser: &ExAws.Utils.identity/2 @type t :: %__MODULE__{} end defimpl ExAws.Operation, for: ExAws.Operation.Query do def perform(operation, config) do data = operation.params |> URI.encode_query() data = case operation.content_encoding do "identity" -> data "gzip" -> :zlib.gzip(data) end url = operation |> Map.delete(:params) |> ExAws.Request.Url.build(config) headers = [ {"content-type", "application/x-www-form-urlencoded"}, {"content-encoding", operation.content_encoding} ] result = ExAws.Request.request(:post, url, data, headers, config, operation.service) parser = operation.parser cond do is_function(parser, 2) -> parser.(result, operation.action) is_function(parser, 3) -> parser.(result, operation.action, config) true -> result end end def stream!(_, _), do: nil end