Current section
Files
Jump to
Current section
Files
src/parser_gleam@stream.erl
-module(parser_gleam@stream).
-compile(no_auto_import).
-export([stream/2, get/1, at_end/1, get_and_next/1, get_eq/1]).
-export_type([stream/1, it_and_next/1]).
-type stream(ELV) :: {stream, list(ELV), integer()}.
-type it_and_next(ELW) :: {it_and_next, ELW, stream(ELW)}.
-spec stream(list(ELZ), gleam@option:option(integer())) -> stream(ELZ).
stream(Buffer, Cursor) ->
{stream,
Buffer,
begin
_pipe = Cursor,
gleam@option:unwrap(_pipe, 0)
end}.
-spec get(stream(EMD)) -> gleam@option:option(EMD).
get(S) ->
_pipe = erlang:element(2, S),
_pipe@1 = gleam@list:at(_pipe, erlang:element(3, S)),
gleam@option:from_result(_pipe@1).
-spec at_end(stream(any())) -> boolean().
at_end(S) ->
erlang:element(3, S) >= gleam@list:length(erlang:element(2, S)).
-spec get_and_next(stream(EMK)) -> gleam@option:option(it_and_next(EMK)).
get_and_next(S) ->
_pipe = get(S),
gleam@option:map(
_pipe,
fun(Value) ->
{it_and_next,
Value,
{stream, erlang:element(2, S), erlang:element(3, S) + 1}}
end
).
-spec get_eq(fp2@eq:eq(EMO)) -> fp2@eq:eq(stream(EMO)).
get_eq(E) ->
fp2@eq:from_equals(
fun(X, Y) ->
Ea = fp2@list:get_eq(E),
(erlang:element(3, X)
=:= erlang:element(3, Y))
andalso (erlang:element(2, Ea))(
erlang:element(2, X),
erlang:element(2, Y)
)
end
).