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