defmodule Waffle.Storage.Google.Url do
@moduledoc """
Defines an interface for generating Google Cloud Storage URLs.
"""
alias Waffle.Types
@doc """
Constructs a URL based on data from Waffle.
"""
@callback build(
definition :: Types.definition(),
version :: Types.version(),
meta :: Types.meta(),
options :: Keyword.t()
) :: String.t()
defmacro __using__(_) do
quote do
@behaviour Waffle.Storage.Google.Url
@before_compile Waffle.Storage.Google.Url
end
end
defmacro __before_compile__(_) do
quote do
@doc """
Same as `build(definition, version, meta, [])`.
"""
@spec build(Types.definition(), Types.version(), Types.meta()) :: String.t()
def build(definition, version, meta), do: build(definition, version, meta, [])
end
end
end