anchor.diff:  
   
   %% @private
  +%% @spec parse_response(Response) -> {ok, string()} | {error, mixed}
  +%% @where Response = {status_line(), headers(), Body} | {status_code(), Body}
  +%% @doc Decode the response body and return a list
  +%% @end
  +%%
  +parse_response({error, Reason}) ->
  +  autocluster_log:error("HTTP Error ~p", [Reason]),
  +  {error, Reason};
  +
  +parse_response({ok, 200, Body})  -> {ok, decode_body(?CONTENT_JSON, Body)};
  +parse_response({ok, 201, Body})  -> {ok, decode_body(?CONTENT_JSON, Body)};
  +parse_response({ok, 204, _})     -> {ok, []};
  +parse_response({ok, Code, Body}) ->
  +  autocluster_log:error("HTTP Response (~p) ~s", [Code, Body]),
  +  {error, integer_to_list(Code)};
  +
  +parse_response({ok, {{_,200,_},Headers,Body}}) ->
  +  {ok, decode_body(proplists:get_value("content-type", Headers, ?CONTENT_JSON), Body)};
  +parse_response({ok,{{_,201,_},Headers,Body}}) ->
  +  {ok, decode_body(proplists:get_value("content-type", Headers, ?CONTENT_JSON), Body)};
  +parse_response({ok,{{_,204,_},_,_}}) -> {ok, []};
  +parse_response({ok,{{_Vsn,Code,_Reason},_,Body}}) ->
  +  autocluster_log:error("HTTP Response (~p) ~s", [Code, Body]),
  +  {error, integer_to_list(Code)}.
  +
  +
  +%% @private
   %% @spec percent_encode(Value) -> string()
   %% @where
   %%       Value = atom() or binary() or integer() or list()
  
positive.code: build_query([], Parts) ->
    string:join(Parts, "&").
  
  %% @public
  %% @spec get(Scheme, Host, Port, Path, Args) -> Result
  %% @where Scheme = string(),
  
negative.code: %%
  post(Scheme, Host, Port, Path, Args, Body) ->
    URL = build_uri(Scheme, Host, Port, Path, Args),
    Response = httpc:request(post, {URL, [], ?CONTENT_JSON, Body}, [], []),
    parse_response(Response).
  
  
  %% @public
  