@callback consume(binary(), binary()) :: {:ok, map()} | {:error, term()}
@callback put(binary(), binary(), map()) :: :ok | {:error, term()}