lib/seo/open_graph/build.ex

defprotocol SEO.OpenGraph.Build do
  @fallback_to_any true
  @moduledoc """
  Implement `build/2` which receives your item and conn and returns a `SEO.OpenGraph.t` or `nil`
  """

  @spec build(term, Plug.Conn.t()) :: SEO.OpenGraph.t() | nil
  def build(item, conn)
end

defimpl SEO.OpenGraph.Build, for: Any do
  def build(item, _conn), do: SEO.OpenGraph.build(item)
end