Packages
phoenix_gen_api
2.20.1
2.22.0
2.21.1
2.21.0
2.20.1
2.20.0
2.19.0
2.18.1
2.18.0
2.17.1
2.17.0
2.16.0
2.15.0
2.14.0
2.13.0
2.12.0
2.11.0
2.10.0
2.9.1
2.9.0
2.8.0
2.7.0
2.6.1
2.6.0
2.5.0
2.4.0
2.3.0
2.2.0
2.1.1
2.1.0
2.0.1
2.0.0
1.2.0
1.1.3
1.1.2
1.1.1
1.1.0
1.0.1
1.0.0
0.2.1
0.2.0
0.1.1
0.1.0
0.0.16
0.0.15
0.0.14
0.0.13
0.0.12
0.0.11
0.0.10
0.0.9
0.0.8
0.0.7
0.0.6
0.0.5
0.0.4
0.0.3
0.0.2
0.0.1
A library for fast develop APIs in Elixir cluster, using Phoenix Channels for transport data, auto pull api configs from service nodes.
Current section
Files
Jump to
Current section
Files
lib/phoenix_gen_api/structs/stream_helper.ex
defmodule PhoenixGenApi.Structs.StreamHelper do
@moduledoc """
Helper struct and functions for sending streaming data to a `StreamCall` process.
A `%StreamHelper{}` holds the PID of the stream process and the request ID.
Use the provided functions to send data chunks, completion signals, and errors
to the stream process, which forwards them to the client as `{:stream_response, response}`
messages.
## Usage
stream = %StreamHelper{stream_pid: pid, request_id: "req_123"}
StreamHelper.send_result(stream, chunk_data) # intermediate chunk
StreamHelper.send_last_result(stream, final_data) # final chunk
StreamHelper.send_complete(stream) # normal completion
StreamHelper.send_error(stream, reason) # error
"""
alias __MODULE__
@typedoc "Stream helper struct."
@type t :: %__MODULE__{
stream_pid: pid(),
request_id: String.t()
}
@derive Nestru.Decoder
defstruct [
# pid, the PID of the stream process.
:stream_pid,
# string, unique identifier for the request.
:request_id
]
@doc """
Wrap result & send to stream.
"""
def send_result(stream = %StreamHelper{}, result) do
send(stream.stream_pid, {:result, result})
end
@doc """
Wrap last result & send to stream.
"""
def send_last_result(stream = %StreamHelper{}, result) do
send(stream.stream_pid, {:last_result, result})
end
@doc """
Wrap complete & send to stream.
"""
def send_complete(stream = %StreamHelper{}) do
send(stream.stream_pid, :complete)
end
@doc """
Wrap error & send to stream.
"""
def send_error(stream = %StreamHelper{}, error) do
send(stream.stream_pid, {:error, error})
end
end