anchor.diff:  	{[SwitchProtocol], State};
   %% Stray message.
   info(_StreamID, _Msg, State) ->
  +	%% @todo Error report.
   	%% @todo Cleanup if no reply was sent when stream ends.
   	{[], State}.
   
  
positive.code: -spec info(_,_,_) -> _.
  info(_StreamID, {'EXIT', Pid, normal}, State=#state{pid=Pid}) ->
  	{[stop], State};
  info(_StreamID, Reason = {'EXIT', Pid, _}, State=#state{pid=Pid}) ->
  	{[{internal_error, Reason, 'Stream process crashed.'}], State};
  %% Request body, no body buffer but IsFin=fin.
  info(_StreamID, {read_body, Ref, _}, State=#state{pid=Pid, read_body_is_fin=fin, read_body_buffer= <<>>}) ->
  	Pid ! {request_body, Ref, fin, <<>>},
  
negative.code: 
  %% @todo proper specs
  -spec init(_,_,_) -> _.
  init(_StreamID, Req=#{ref := Ref}, Opts) ->
  	Env = maps:get(env, Opts, #{}),
  	Middlewares = maps:get(middlewares, Opts, [cowboy_router, cowboy_handler]),
  	Shutdown = maps:get(shutdown, Opts, 5000),
  	Pid = proc_lib:spawn_link(?MODULE, proc_lib_hack, [Req, Env, Middlewares]),
  	{[{spawn, Pid, Shutdown}], #state{ref=Ref, pid=Pid}}.
  
  %% If we receive data and stream is waiting for data:
  %%	If we accumulated enough data or IsFin=fin, send it.
  