data() :: Map.t
key() :: String.t
metadata() :: Map.t
process(data, key, metadata) :: {:error, String.t}
process(data, key, metadata) :: {:ok}