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