lib/aliyun_oss/object/acl.ex

defmodule Aliyun.Oss.Object.ACL do
  @moduledoc """
  Object operations - ACL.
  """

  import Aliyun.Oss.Object, only: [get_object: 5, put_object: 6]
  alias Aliyun.Oss.Config
  alias Aliyun.Oss.Client.{Response, Error}

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

  @doc """
  GetObjectACL - gets the access control list (ACL) of an object.

  ## Examples

      iex> Aliyun.Oss.Object.ACL.get(config, "some-bucket", "some-object")
      {:ok, %Aliyun.Oss.Client.Response{
          data: %{
            "AccessControlPolicy" => %{
              "AccessControlList" => %{"Grant" => "default"},
              "Owner" => %{
                "DisplayName" => "1111111111111111",
                "ID" => "1111111111111111"
              }
            }
          },
          headers: [
            {"Date", "Wed, 05 Dec 2018 02:34:57 GMT"}
          ]
        }
      }

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

  @doc """
  PutObjectACL - modifies the access control list (ACL) of an object.

  ## Examples

      iex> Aliyun.Oss.Object.ACL.put(config, "some-bucket", "some-object", "private")
      {:ok, %Aliyun.Oss.Client.Response{
          data: "",
          headers: [
            {"Server", "AliyunOSS"},
            {"Date", "Wed, 05 Dec 2018 02:34:57 GMT"},
            ...
          ]
        }
      }
  """
  @spec put(Config.t(), String.t(), String.t(), String.t()) ::
          {:error, error()} | {:ok, Response.t()}
  def put(config, bucket, object, acl) do
    put_object(config, bucket, object, "", %{"x-oss-object-acl" => acl}, %{"acl" => nil})
  end
end