defmodule Gumroad do @external_resource readme = Path.join([__DIR__, "../README.md"]) @moduledoc readme |> File.read!() |> String.split("") |> Enum.fetch!(1) @behaviour Gumroad.Client @doc """ The Gumroad client to use. Setting the `:gumroad_elixir` `:client` config value will determine which client gets returned by this function. In production, this will be `Gumroad.Client.Live`, for testing this will likely be `Gumroad.Client.Mock`. """ @spec client() :: Gumroad.Client def client do Application.get_env(:gumroad_elixir, :client, Gumroad.Client.Live) end @spec get_products() :: {:ok, list(Gumroad.Product.t())} | {:error, Gumroad.Error.t()} def get_products() do client().get_products() end @spec get_product(product_id :: String.t()) :: {:ok, Gumroad.Product.t()} | {:error, Gumroad.Error.t()} def get_product(product_id) do client().get_product(product_id) end @spec get_resource_subscriptions(resource_name :: String.t()) :: {:ok, list(Gumroad.ResourceSubscription.t())} | {:error, Gumroad.Error.t()} def get_resource_subscriptions(resource_name) when is_binary(resource_name) do client().get_resource_subscriptions(resource_name) end @spec create_resource_subscription(params :: Gumroad.ResourceSubscription.create_params()) :: {:ok, Gumroad.ResourceSubscription.t()} | {:error, Gumroad.Error.t()} def create_resource_subscription(params) do client().create_resource_subscription(params) end @spec delete_resource_subscription(resource_subscription_id :: String.t()) :: {:ok} | {:error, Gumroad.Error.t()} def delete_resource_subscription(resource_subscription_id) do client().delete_resource_subscription(resource_subscription_id) end @spec get_subscribers(product_id :: String.t()) :: {:ok, list(Gumroad.Subscriber.t())} | {:error, Gumroad.Error.t()} def get_subscribers(product_id) when is_binary(product_id) do client().get_subscribers(product_id) end @spec get_subscriber(subscriber_id :: String.t()) :: {:ok, Gumroad.Subscriber.t()} | {:error, Gumroad.Error.t()} def get_subscriber(subscriber_id) when is_binary(subscriber_id) do client().get_subscriber(subscriber_id) end @spec get_sale(sale_id :: String.t()) :: {:ok, Gumroad.Sale.t()} | {:error, Gumroad.Error.t()} def get_sale(sale_id) when is_binary(sale_id) do client().get_sale(sale_id) end @spec get_sales(params :: Gumroad.Client.get_sales_params()) :: {:ok, list(Gumroad.Sale.t())} | {:error, Gumroad.Error.t()} def get_sales(params) do client().get_sales(params) end end