XmtpElixirSdk.BrowserShim.AsyncStream (xmtp_elixir_sdk v0.1.2)

Copy Markdown

Small async stream primitive for browser-shim boundaries.

The stream keeps producer and consumer coordination in one process so the browser layer can stay thin. Values are delivered in FIFO order, and done/1 drains pending consumers before closing the stream.

Summary

Types

state()

@type state() :: %XmtpElixirSdk.BrowserShim.AsyncStream{
  done?: boolean(),
  queue: :queue.queue(term()),
  waiters: [{pid(), reference()}]
}

Functions

child_spec(init_arg)

Returns a specification to start this module under a supervisor.

See Supervisor.

close(server)

@spec close(GenServer.server()) :: :ok

done(server)

@spec done(GenServer.server()) :: :ok

next(server, timeout \\ 5000)

@spec next(GenServer.server(), timeout()) ::
  {:ok, term()} | {:done, :closed} | {:error, :timeout}

push(server, value)

@spec push(GenServer.server(), term()) :: :ok

start_link(opts \\ [])

@spec start_link(GenServer.options()) :: GenServer.on_start()

stream(server)

@spec stream(GenServer.server()) :: Enumerable.t()