= cowboy_req:cast(3)

== Name

cowboy_req:cast - Cast a stream handler event

== Description

[source,erlang]
----
cast(Event :: any(), Req :: cowboy_req:req()) -> ok
----

Cast a stream handler event.

The event will be passed to stream handlers through the
`info/3` callback.

== Arguments

Event::

The event to be sent to stream handlers.

Req::

The Req object.

== Return value

The atom `ok` is always returned. It can be safely ignored.

== Changelog

* *2.7*: Function introduced.

== Examples

.Read the body using auto mode
[source,erlang]
----
read_body_auto_async(Req) ->
    read_body_auto_async(Req, make_ref(), <<>>).

read_body_auto_async(Req, Ref, Acc) ->
    cowboy_req:cast({read_body, self(), Ref, auto, infinity}, Req),
    receive
        {request_body, Ref, nofin, Data} ->
            read_body_auto_async(Req, Ref, <<Acc/binary, Data/binary>>);
        {request_body, Ref, fin, _BodyLen, Data} ->
            {ok, <<Acc/binary, Data/binary>>, Req}
    end.
----

.Increase the HTTP/1.1 idle timeout
[source,erlang]
----
cowboy_req:cast({set_options, #{
    idle_timeout => 3600000
}}, Req).
----

.Add user data to metrics
----
cowboy_req:cast({set_options, #{
    metrics_user_data => #{handler => ?MODULE}
}}, Req).
----

.Enable compression buffering
----
cowboy_req:cast({set_options, #{
    compress_buffering => true
}}, Req).
----

== See also

link:man:cowboy_req(3)[cowboy_req(3)],
link:man:cowboy_stream(3)[cowboy_stream(3)]
