defmodule HTTP.WebSocket.ArrayBuffer do @moduledoc """ Explicit binary frame payload wrapper for `HTTP.WebSocket.send/2`. Plain Elixir binaries are also strings, so `HTTP.WebSocket.send/2` treats a bare binary as text. Wrap binary data with this struct when the WebSocket frame opcode must be binary. """ defstruct data: <<>>, byte_length: 0 @type t :: %__MODULE__{data: binary(), byte_length: non_neg_integer()} @doc """ Creates a new array buffer wrapper. """ @spec new(binary()) :: t() def new(data) when is_binary(data) do %__MODULE__{data: data, byte_length: byte_size(data)} end end