A2UI.Protocol.Parser (A2UI v0.3.0)

Copy Markdown View Source

Parses A2UI JSONL streams into protocol message structs.

Summary

Functions

Parses a single JSON string into a message struct.

Parses a JSONL string (multiple JSON objects separated by newlines) into a list of messages.

Returns a lazy stream that parses each line from an enumerable into messages.

Functions

parse(json)

@spec parse(String.t()) :: {:ok, A2UI.Protocol.Message.t()} | {:error, String.t()}

Parses a single JSON string into a message struct.

Examples

iex> A2UI.Protocol.Parser.parse(~s({"version":"v0.9","deleteSurface":{"surfaceId":"main"}}))
{:ok, %A2UI.Protocol.Messages.DeleteSurface{surface_id: "main"}}

parse_stream(jsonl)

@spec parse_stream(String.t()) ::
  {:ok, [A2UI.Protocol.Message.t()]} | {:error, String.t()}

Parses a JSONL string (multiple JSON objects separated by newlines) into a list of messages.

Blank lines are skipped. Returns {:ok, messages} if all lines parse successfully, or {:error, reason} on the first failure.

Examples

iex> jsonl = ~s({"version":"v0.9","deleteSurface":{"surfaceId":"a"}}\n{"version":"v0.9","deleteSurface":{"surfaceId":"b"}})
iex> {:ok, messages} = A2UI.Protocol.Parser.parse_stream(jsonl)
iex> length(messages)
2

stream(lines)

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

Returns a lazy stream that parses each line from an enumerable into messages.

Each element yields {:ok, message} or {:error, reason}.