lib/cozy_oss.ex

defmodule CozyOSS do
  @moduledoc """
  An SDK builder for RESTful API of Aliyun OSS / Alibaba Cloud OSS.
  """

  alias __MODULE__.Config
  alias __MODULE__.ApiSpec
  alias __MODULE__.ApiRequest
  alias __MODULE__.ApiClient
  alias __MODULE__.Object

  @doc """
  Bulids a struct `%CozyOSS.ApiRequest{}`.

  This function has built-in signing support, and it's controlled by option `:sign_by`:

  + `sign_by: :header` (default) - add signatures to request headers.
  + `sign_by: :url` - add signatures to URL.

  When using `sign_by: :url`, an extra option `:expiration_in_seconds` is supported.

  See `CozyOSS.ApiRequest.build!/3` for more information.

  """
  @spec build!(Config.t(), ApiSpec.config()) :: any()
  def build!(%Config{} = config, api_spec_config, opts \\ []) do
    api_spec = ApiSpec.build!(api_spec_config)
    ApiRequest.build!(config, api_spec, opts)
  end

  defdelegate request(api_request), to: ApiClient

  defdelegate to_url!(api_request), to: ApiRequest

  defdelegate sign_post_object_policy(config, conditions, expiration_in_seconds), to: Object

  @doc false
  def json_library, do: Application.fetch_env!(:cozy_oss, :json_library)
end