lib/aliyun_oss/bucket/request_payment.ex

defmodule Aliyun.Oss.Bucket.RequestPayment do
  @moduledoc """
  Bucket operations - RequestPayment.
  """

  import Aliyun.Oss.Bucket, only: [get_bucket: 4, put_bucket: 5]
  alias Aliyun.Oss.Config
  alias Aliyun.Oss.Client.{Response, Error}

  @type error() ::
          %Error{body: String.t(), status_code: integer(), parsed_details: map()} | atom()

  @doc """
  GetBucketRequestPayment - gets pay-by-requester configurations for a bucket.

  ## Examples

      iex> Aliyun.Oss.Bucket.RequestPayment.get("some-bucket")
      {:ok, %Aliyun.Oss.Client.Response{
          data: %{"RequestPaymentConfiguration" => %{"Payer" => "BucketOwner"}},
          headers: [
            {"Server", "AliyunOSS"},
            {"Date", "Fri, 01 Mar 2019 06:26:07 GMT"},
            ...
          ]
        }
      }

  """
  @spec get(Config.t(), String.t()) :: {:error, error()} | {:ok, Response.t()}
  def get(config, bucket) do
    get_bucket(config, bucket, %{}, %{"requestPayment" => nil})
  end

  @doc """
  PutBucketRequestPayment - enables pay-by-requester for a bucket.

  ## Examples

      iex> Aliyun.Oss.Bucket.RequestPayment.put("some-bucket", "Requester)
      {:ok, %Aliyun.Oss.Client.Response{
          data: "",
          headers: [
            {"Server", "AliyunOSS"},
            {"Date", "Fri, 01 Mar 2019 06:26:07 GMT"},
            ...
          ]
        }
      }

  """
  @body_tmpl """
  <?xml version="1.0" encoding="UTF-8"?>
  <RequestPaymentConfiguration>
    <Payer><%= payer %></Payer>
  </RequestPaymentConfiguration>
  """
  @spec put(Config.t(), String.t(), String.t()) :: {:error, error()} | {:ok, Response.t()}
  def put(config, bucket, payer) do
    xml_body = EEx.eval_string(@body_tmpl, payer: payer)
    put_bucket(config, bucket, %{}, %{"requestPayment" => nil}, xml_body)
  end
end