defmodule Geocoder do
@moduledoc """
Geocoder is a simple, efficient geocoder/reverse geocoder with a built-in cache support
"""
alias Geocoder.Worker
def call(opts) when is_list(opts), do: Worker.geocode(opts)
def call(q, opts \\ [])
def call(q, opts) when is_binary(q), do: Worker.geocode(opts ++ [address: q])
def call({lat, lon} = q, opts),
do: Worker.reverse_geocode(opts ++ [lat: lat, lon: lon, latlng: q])
def call(%{lat: lat, lon: lon}, opts), do: call([latlng: {lat, lon}] ++ opts)
def call_list(q, opts \\ [])
def call_list(q, opts) when is_binary(q), do: Worker.geocode_list(opts ++ [address: q])
def call_list({_, _} = q, opts), do: Worker.reverse_geocode_list(opts ++ [latlng: q])
def call_list(%{lat: lat, lon: lon}, opts), do: call_list(opts ++ [latlng: {lat, lon}])
end