-module(mochi@sdl_parser). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]). -define(FILEPATH, "src/mochi/sdl_parser.gleam"). -export([parse_sdl/1]). -export_type([s_d_l_parse_error/0, s_d_l_parser/0]). -if(?OTP_RELEASE >= 27). -define(MODULEDOC(Str), -moduledoc(Str)). -define(DOC(Str), -doc(Str)). -else. -define(MODULEDOC(Str), -compile([])). -define(DOC(Str), -compile([])). -endif. -type s_d_l_parse_error() :: {s_d_l_lex_error, mochi@sdl_lexer:s_d_l_lexer_error()} | {unexpected_token, binary(), mochi@sdl_lexer:s_d_l_token(), mochi@sdl_lexer:position()} | {unexpected_e_o_f, binary()} | {invalid_type_definition, binary(), mochi@sdl_lexer:position()}. -type s_d_l_parser() :: {s_d_l_parser, mochi@sdl_lexer:s_d_l_lexer_state(), {ok, mochi@sdl_lexer:s_d_l_token_with_position()} | {error, mochi@sdl_lexer:s_d_l_lexer_error()}}. -file("src/mochi/sdl_parser.gleam", 27). -spec advance(mochi@sdl_lexer:s_d_l_lexer_state()) -> s_d_l_parser(). advance(Lexer) -> case mochi@sdl_lexer:next_sdl_token(Lexer) of {ok, {Token, Next_lexer}} -> {s_d_l_parser, Next_lexer, {ok, Token}}; {error, Err} -> {s_d_l_parser, Lexer, {error, Err}} end. -file("src/mochi/sdl_parser.gleam", 632). ?DOC( " Convert a keyword token to its string representation\n" " GraphQL keywords are contextual and can be used as names\n" ). -spec keyword_to_name(mochi@sdl_lexer:s_d_l_token()) -> {ok, binary()} | {error, nil}. keyword_to_name(Token) -> case Token of type -> {ok, <<"type"/utf8>>}; interface -> {ok, <<"interface"/utf8>>}; union -> {ok, <<"union"/utf8>>}; scalar -> {ok, <<"scalar"/utf8>>}; enum -> {ok, <<"enum"/utf8>>}; input -> {ok, <<"input"/utf8>>}; directive -> {ok, <<"directive"/utf8>>}; schema -> {ok, <<"schema"/utf8>>}; extend -> {ok, <<"extend"/utf8>>}; implements -> {ok, <<"implements"/utf8>>}; _ -> {error, nil} end. -file("src/mochi/sdl_parser.gleam", 1044). -spec directive_location_from_name(binary()) -> {ok, mochi@sdl_ast:directive_location()} | {error, nil}. directive_location_from_name(Name) -> case Name of <<"QUERY"/utf8>> -> {ok, q_u_e_r_y}; <<"MUTATION"/utf8>> -> {ok, m_u_t_a_t_i_o_n}; <<"SUBSCRIPTION"/utf8>> -> {ok, s_u_b_s_c_r_i_p_t_i_o_n}; <<"FIELD"/utf8>> -> {ok, f_i_e_l_d}; <<"FRAGMENT_DEFINITION"/utf8>> -> {ok, f_r_a_g_m_e_n_t_d_e_f_i_n_i_t_i_o_n}; <<"FRAGMENT_SPREAD"/utf8>> -> {ok, f_r_a_g_m_e_n_t_s_p_r_e_a_d}; <<"INLINE_FRAGMENT"/utf8>> -> {ok, i_n_l_i_n_e_f_r_a_g_m_e_n_t}; <<"VARIABLE_DEFINITION"/utf8>> -> {ok, v_a_r_i_a_b_l_e_d_e_f_i_n_i_t_i_o_n}; <<"SCHEMA"/utf8>> -> {ok, s_c_h_e_m_a}; <<"SCALAR"/utf8>> -> {ok, s_c_a_l_a_r}; <<"OBJECT"/utf8>> -> {ok, o_b_j_e_c_t}; <<"FIELD_DEFINITION"/utf8>> -> {ok, f_i_e_l_d_d_e_f_i_n_i_t_i_o_n}; <<"ARGUMENT_DEFINITION"/utf8>> -> {ok, a_r_g_u_m_e_n_t_d_e_f_i_n_i_t_i_o_n}; <<"INTERFACE"/utf8>> -> {ok, i_n_t_e_r_f_a_c_e}; <<"UNION"/utf8>> -> {ok, u_n_i_o_n}; <<"ENUM"/utf8>> -> {ok, e_n_u_m}; <<"ENUM_VALUE"/utf8>> -> {ok, e_n_u_m_v_a_l_u_e}; <<"INPUT_OBJECT"/utf8>> -> {ok, i_n_p_u_t_o_b_j_e_c_t}; <<"INPUT_FIELD_DEFINITION"/utf8>> -> {ok, i_n_p_u_t_f_i_e_l_d_d_e_f_i_n_i_t_i_o_n}; _ -> {error, nil} end. -file("src/mochi/sdl_parser.gleam", 1254). -spec peek_token(s_d_l_parser()) -> {ok, mochi@sdl_lexer:s_d_l_token_with_position()} | {error, s_d_l_parse_error()}. peek_token(Parser) -> case erlang:element(3, Parser) of {ok, Token} -> {ok, Token}; {error, Err} -> {error, {s_d_l_lex_error, Err}} end. -file("src/mochi/sdl_parser.gleam", 1261). -spec consume_token(s_d_l_parser()) -> {ok, {mochi@sdl_lexer:s_d_l_token_with_position(), s_d_l_parser()}} | {error, s_d_l_parse_error()}. consume_token(Parser) -> case erlang:element(3, Parser) of {ok, Token} -> {ok, {Token, advance(erlang:element(2, Parser))}}; {error, Err} -> {error, {s_d_l_lex_error, Err}} end. -file("src/mochi/sdl_parser.gleam", 148). ?DOC(" Parse optional description (triple-quoted string)\n"). -spec parse_optional_description(s_d_l_parser()) -> {gleam@option:option(binary()), s_d_l_parser()}. parse_optional_description(Parser) -> case peek_token(Parser) of {ok, {s_d_l_token_with_position, {description, Content}, _}} -> case consume_token(Parser) of {ok, {_, New_parser}} -> {{some, Content}, New_parser}; {error, _} -> {none, Parser} end; {ok, {s_d_l_token_with_position, {string_value, Content@1}, _}} -> case consume_token(Parser) of {ok, {_, New_parser@1}} -> {{some, Content@1}, New_parser@1}; {error, _} -> {none, Parser} end; _ -> {none, Parser} end. -file("src/mochi/sdl_parser.gleam", 616). -spec parse_name(s_d_l_parser()) -> {ok, {binary(), s_d_l_parser()}} | {error, s_d_l_parse_error()}. parse_name(Parser) -> case consume_token(Parser) of {ok, {{s_d_l_token_with_position, {name, Name}, _}, Parser@1}} -> {ok, {Name, Parser@1}}; {ok, {{s_d_l_token_with_position, Token, Position}, Parser@2}} -> case keyword_to_name(Token) of {ok, Name@1} -> {ok, {Name@1, Parser@2}}; {error, _} -> {error, {unexpected_token, <<"name"/utf8>>, Token, Position}} end; {error, Err} -> {error, Err} end. -file("src/mochi/sdl_parser.gleam", 660). -spec parse_implements_interfaces(s_d_l_parser(), list(binary())) -> {ok, {list(binary()), s_d_l_parser()}} | {error, s_d_l_parse_error()}. parse_implements_interfaces(Parser, Acc) -> gleam@result:'try'( parse_name(Parser), fun(_use0) -> {Interface_name, Parser@1} = _use0, New_acc = [Interface_name | Acc], case peek_token(Parser@1) of {ok, {s_d_l_token_with_position, amp, _}} -> gleam@result:'try'( consume_token(Parser@1), fun(_use0@1) -> {_, Parser@2} = _use0@1, parse_implements_interfaces(Parser@2, New_acc) end ); _ -> {ok, {lists:reverse(New_acc), Parser@1}} end end ). -file("src/mochi/sdl_parser.gleam", 648). -spec parse_optional_implements(s_d_l_parser()) -> {ok, {list(binary()), s_d_l_parser()}} | {error, s_d_l_parse_error()}. parse_optional_implements(Parser) -> case peek_token(Parser) of {ok, {s_d_l_token_with_position, implements, _}} -> gleam@result:'try'( consume_token(Parser), fun(_use0) -> {_, Parser@1} = _use0, parse_implements_interfaces(Parser@1, []) end ); _ -> {ok, {[], Parser}} end. -file("src/mochi/sdl_parser.gleam", 1022). -spec parse_directive_location(s_d_l_parser()) -> {ok, {mochi@sdl_ast:directive_location(), s_d_l_parser()}} | {error, s_d_l_parse_error()}. parse_directive_location(Parser) -> case peek_token(Parser) of {ok, {s_d_l_token_with_position, {name, Name}, Position}} -> case directive_location_from_name(Name) of {ok, Location} -> gleam@result:'try'( consume_token(Parser), fun(_use0) -> {_, Parser@1} = _use0, {ok, {Location, Parser@1}} end ); {error, _} -> {error, {invalid_type_definition, <<"Invalid directive location: "/utf8, Name/binary>>, Position}} end; {ok, {s_d_l_token_with_position, Token, Position@1}} -> {error, {unexpected_token, <<"directive location"/utf8>>, Token, Position@1}}; {error, Err} -> {error, Err} end. -file("src/mochi/sdl_parser.gleam", 1008). -spec parse_directive_locations_tail( s_d_l_parser(), list(mochi@sdl_ast:directive_location()) ) -> {ok, {list(mochi@sdl_ast:directive_location()), s_d_l_parser()}} | {error, s_d_l_parse_error()}. parse_directive_locations_tail(Parser, Acc) -> case peek_token(Parser) of {ok, {s_d_l_token_with_position, pipe, _}} -> gleam@result:'try'( consume_token(Parser), fun(_use0) -> {_, Parser@1} = _use0, gleam@result:'try'( parse_directive_location(Parser@1), fun(_use0@1) -> {Location, Parser@2} = _use0@1, parse_directive_locations_tail( Parser@2, [Location | Acc] ) end ) end ); _ -> {ok, {lists:reverse(Acc), Parser}} end. -file("src/mochi/sdl_parser.gleam", 993). -spec parse_directive_locations(s_d_l_parser()) -> {ok, {list(mochi@sdl_ast:directive_location()), s_d_l_parser()}} | {error, s_d_l_parse_error()}. parse_directive_locations(Parser) -> gleam@result:'try'(case peek_token(Parser) of {ok, {s_d_l_token_with_position, pipe, _}} -> gleam@result:'try'( consume_token(Parser), fun(_use0) -> {_, Parser@1} = _use0, {ok, Parser@1} end ); _ -> {ok, Parser} end, fun(Parser@2) -> gleam@result:'try'( parse_directive_location(Parser@2), fun(_use0@1) -> {First, Parser@3} = _use0@1, parse_directive_locations_tail(Parser@3, [First]) end ) end). -file("src/mochi/sdl_parser.gleam", 1125). -spec parse_union_member_types_helper(s_d_l_parser(), list(binary())) -> {ok, {list(binary()), s_d_l_parser()}} | {error, s_d_l_parse_error()}. parse_union_member_types_helper(Parser, Acc) -> case peek_token(Parser) of {ok, {s_d_l_token_with_position, pipe, _}} -> gleam@result:'try'( consume_token(Parser), fun(_use0) -> {_, Parser@1} = _use0, gleam@result:'try'( parse_name(Parser@1), fun(_use0@1) -> {Member, Parser@2} = _use0@1, parse_union_member_types_helper( Parser@2, [Member | Acc] ) end ) end ); _ -> {ok, {lists:reverse(Acc), Parser}} end. -file("src/mochi/sdl_parser.gleam", 1110). -spec parse_union_member_types(s_d_l_parser()) -> {ok, {list(binary()), s_d_l_parser()}} | {error, s_d_l_parse_error()}. parse_union_member_types(Parser) -> gleam@result:'try'(case peek_token(Parser) of {ok, {s_d_l_token_with_position, pipe, _}} -> gleam@result:'try'( consume_token(Parser), fun(_use0) -> {_, Parser@1} = _use0, {ok, Parser@1} end ); _ -> {ok, Parser} end, fun(Parser@2) -> gleam@result:'try'( parse_name(Parser@2), fun(_use0@1) -> {First_member, Parser@3} = _use0@1, parse_union_member_types_helper(Parser@3, [First_member]) end ) end). -file("src/mochi/sdl_parser.gleam", 1270). -spec expect_token(s_d_l_parser(), mochi@sdl_lexer:s_d_l_token(), binary()) -> {ok, {mochi@sdl_lexer:s_d_l_token_with_position(), s_d_l_parser()}} | {error, s_d_l_parse_error()}. expect_token(Parser, Expected, Description) -> gleam@result:'try'( consume_token(Parser), fun(_use0) -> {{s_d_l_token_with_position, Token, Position}, Next_parser} = _use0, case Token =:= Expected of true -> {ok, {{s_d_l_token_with_position, Token, Position}, Next_parser}}; false -> {error, {unexpected_token, Description, Token, Position}} end end ). -file("src/mochi/sdl_parser.gleam", 772). -spec parse_type(s_d_l_parser()) -> {ok, {mochi@sdl_ast:s_d_l_type(), s_d_l_parser()}} | {error, s_d_l_parse_error()}. parse_type(Parser) -> case peek_token(Parser) of {ok, {s_d_l_token_with_position, left_bracket, _}} -> gleam@result:'try'( consume_token(Parser), fun(_use0) -> {_, Parser@1} = _use0, gleam@result:'try'( parse_type(Parser@1), fun(_use0@1) -> {Inner_type, Parser@2} = _use0@1, gleam@result:'try'( expect_token( Parser@2, right_bracket, <<"]"/utf8>> ), fun(_use0@2) -> {_, Parser@3} = _use0@2, List_type = {list_type, Inner_type}, case peek_token(Parser@3) of {ok, {s_d_l_token_with_position, bang, _}} -> gleam@result:'try'( consume_token(Parser@3), fun(_use0@3) -> {_, Parser@4} = _use0@3, {ok, {{non_null_type, List_type}, Parser@4}} end ); _ -> {ok, {List_type, Parser@3}} end end ) end ) end ); {ok, {s_d_l_token_with_position, {name, Name}, _}} -> gleam@result:'try'( consume_token(Parser), fun(_use0@4) -> {_, Parser@5} = _use0@4, Named_type = {named_type, Name}, case peek_token(Parser@5) of {ok, {s_d_l_token_with_position, bang, _}} -> gleam@result:'try'( consume_token(Parser@5), fun(_use0@5) -> {_, Parser@6} = _use0@5, {ok, {{non_null_type, Named_type}, Parser@6}} end ); _ -> {ok, {Named_type, Parser@5}} end end ); {ok, {s_d_l_token_with_position, Token, Position}} -> {error, {unexpected_token, <<"type"/utf8>>, Token, Position}}; {error, Err} -> {error, Err} end. -file("src/mochi/sdl_parser.gleam", 1071). -spec parse_list_values(s_d_l_parser(), list(mochi@sdl_ast:s_d_l_value())) -> {ok, {list(mochi@sdl_ast:s_d_l_value()), s_d_l_parser()}} | {error, s_d_l_parse_error()}. parse_list_values(Parser, Acc) -> case peek_token(Parser) of {ok, {s_d_l_token_with_position, right_bracket, _}} -> gleam@result:'try'( consume_token(Parser), fun(_use0) -> {_, Parser@1} = _use0, {ok, {lists:reverse(Acc), Parser@1}} end ); {ok, _} -> gleam@result:'try'( parse_value(Parser), fun(_use0@1) -> {Value, Parser@2} = _use0@1, parse_list_values(Parser@2, [Value | Acc]) end ); {error, Err} -> {error, Err} end. -file("src/mochi/sdl_parser.gleam", 908). -spec parse_value(s_d_l_parser()) -> {ok, {mochi@sdl_ast:s_d_l_value(), s_d_l_parser()}} | {error, s_d_l_parse_error()}. parse_value(Parser) -> case peek_token(Parser) of {ok, {s_d_l_token_with_position, {int_value, Value}, _}} -> gleam@result:'try'( consume_token(Parser), fun(_use0) -> {_, Parser@1} = _use0, {ok, {{int_value, Value}, Parser@1}} end ); {ok, {s_d_l_token_with_position, {float_value, Value@1}, _}} -> gleam@result:'try'( consume_token(Parser), fun(_use0@1) -> {_, Parser@2} = _use0@1, {ok, {{float_value, Value@1}, Parser@2}} end ); {ok, {s_d_l_token_with_position, {string_value, Value@2}, _}} -> gleam@result:'try'( consume_token(Parser), fun(_use0@2) -> {_, Parser@3} = _use0@2, {ok, {{string_value, Value@2}, Parser@3}} end ); {ok, {s_d_l_token_with_position, {boolean_value, Value@3}, _}} -> gleam@result:'try'( consume_token(Parser), fun(_use0@3) -> {_, Parser@4} = _use0@3, {ok, {{boolean_value, Value@3}, Parser@4}} end ); {ok, {s_d_l_token_with_position, {name, <<"null"/utf8>>}, _}} -> gleam@result:'try'( consume_token(Parser), fun(_use0@4) -> {_, Parser@5} = _use0@4, {ok, {null_value, Parser@5}} end ); {ok, {s_d_l_token_with_position, {name, Name}, _}} -> gleam@result:'try'( consume_token(Parser), fun(_use0@5) -> {_, Parser@6} = _use0@5, {ok, {{enum_value, Name}, Parser@6}} end ); {ok, {s_d_l_token_with_position, left_bracket, _}} -> gleam@result:'try'( consume_token(Parser), fun(_use0@6) -> {_, Parser@7} = _use0@6, gleam@result:'try'( parse_list_values(Parser@7, []), fun(_use0@7) -> {Values, Parser@8} = _use0@7, {ok, {{list_value, Values}, Parser@8}} end ) end ); {ok, {s_d_l_token_with_position, left_brace, _}} -> gleam@result:'try'( consume_token(Parser), fun(_use0@8) -> {_, Parser@9} = _use0@8, gleam@result:'try'( parse_object_field_values(Parser@9, []), fun(_use0@9) -> {Fields, Parser@10} = _use0@9, {ok, {{object_value, Fields}, Parser@10}} end ) end ); {ok, {s_d_l_token_with_position, Token, Position}} -> {error, {unexpected_token, <<"value"/utf8>>, Token, Position}}; {error, Err} -> {error, Err} end. -file("src/mochi/sdl_parser.gleam", 241). -spec parse_directive_argument(s_d_l_parser()) -> {ok, {mochi@sdl_ast:directive_argument(), s_d_l_parser()}} | {error, s_d_l_parse_error()}. parse_directive_argument(Parser) -> gleam@result:'try'( parse_name(Parser), fun(_use0) -> {Name, Parser@1} = _use0, gleam@result:'try'( expect_token(Parser@1, colon, <<":"/utf8>>), fun(_use0@1) -> {_, Parser@2} = _use0@1, gleam@result:'try'( parse_value(Parser@2), fun(_use0@2) -> {Value, Parser@3} = _use0@2, {ok, {{directive_argument, Name, Value}, Parser@3}} end ) end ) end ). -file("src/mochi/sdl_parser.gleam", 224). -spec parse_directive_arguments_loop( s_d_l_parser(), list(mochi@sdl_ast:directive_argument()) ) -> {ok, {list(mochi@sdl_ast:directive_argument()), s_d_l_parser()}} | {error, s_d_l_parse_error()}. parse_directive_arguments_loop(Parser, Acc) -> case peek_token(Parser) of {ok, {s_d_l_token_with_position, right_paren, _}} -> {ok, {lists:reverse(Acc), Parser}}; {ok, {s_d_l_token_with_position, {name, _}, _}} -> gleam@result:'try'( parse_directive_argument(Parser), fun(_use0) -> {Argument, Parser@1} = _use0, parse_directive_arguments_loop(Parser@1, [Argument | Acc]) end ); {ok, {s_d_l_token_with_position, Token, Position}} -> {error, {unexpected_token, <<"argument or ')'"/utf8>>, Token, Position}}; {error, Err} -> {error, Err} end. -file("src/mochi/sdl_parser.gleam", 204). ?DOC(" Parse optional directive arguments: (arg: value, ...)\n"). -spec parse_optional_directive_arguments(s_d_l_parser()) -> {ok, {list(mochi@sdl_ast:directive_argument()), s_d_l_parser()}} | {error, s_d_l_parse_error()}. parse_optional_directive_arguments(Parser) -> case peek_token(Parser) of {ok, {s_d_l_token_with_position, left_paren, _}} -> gleam@result:'try'( consume_token(Parser), fun(_use0) -> {_, Parser@1} = _use0, gleam@result:'try'( parse_directive_arguments_loop(Parser@1, []), fun(_use0@1) -> {Arguments, Parser@2} = _use0@1, gleam@result:'try'( expect_token( Parser@2, right_paren, <<")"/utf8>> ), fun(_use0@2) -> {_, Parser@3} = _use0@2, {ok, {Arguments, Parser@3}} end ) end ) end ); _ -> {ok, {[], Parser}} end. -file("src/mochi/sdl_parser.gleam", 188). ?DOC(" Parse a single directive usage: @name or @name(arg: value, ...)\n"). -spec parse_directive_usage(s_d_l_parser()) -> {ok, {mochi@sdl_ast:directive_usage(), s_d_l_parser()}} | {error, s_d_l_parse_error()}. parse_directive_usage(Parser) -> gleam@result:'try'( expect_token(Parser, at, <<"@"/utf8>>), fun(_use0) -> {_, Parser@1} = _use0, gleam@result:'try'( parse_name(Parser@1), fun(_use0@1) -> {Name, Parser@2} = _use0@1, gleam@result:'try'( parse_optional_directive_arguments(Parser@2), fun(_use0@2) -> {Arguments, Parser@3} = _use0@2, {ok, {{directive_usage, Name, Arguments}, Parser@3}} end ) end ) end ). -file("src/mochi/sdl_parser.gleam", 174). -spec parse_directives_loop( s_d_l_parser(), list(mochi@sdl_ast:directive_usage()) ) -> {ok, {list(mochi@sdl_ast:directive_usage()), s_d_l_parser()}} | {error, s_d_l_parse_error()}. parse_directives_loop(Parser, Acc) -> case peek_token(Parser) of {ok, {s_d_l_token_with_position, at, _}} -> gleam@result:'try'( parse_directive_usage(Parser), fun(_use0) -> {Directive, Parser@1} = _use0, parse_directives_loop(Parser@1, [Directive | Acc]) end ); _ -> {ok, {lists:reverse(Acc), Parser}} end. -file("src/mochi/sdl_parser.gleam", 168). ?DOC(" Parse optional directives (@name or @name(args...))\n"). -spec parse_optional_directives(s_d_l_parser()) -> {ok, {list(mochi@sdl_ast:directive_usage()), s_d_l_parser()}} | {error, s_d_l_parse_error()}. parse_optional_directives(Parser) -> parse_directives_loop(Parser, []). -file("src/mochi/sdl_parser.gleam", 308). ?DOC(" Parse: union SearchResult = User | Post\n"). -spec parse_union_type_definition(s_d_l_parser(), gleam@option:option(binary())) -> {ok, {mochi@sdl_ast:union_type_def(), s_d_l_parser()}} | {error, s_d_l_parse_error()}. parse_union_type_definition(Parser, Description) -> gleam@result:'try'( expect_token(Parser, union, <<"union"/utf8>>), fun(_use0) -> {_, Parser@1} = _use0, gleam@result:'try'( parse_name(Parser@1), fun(_use0@1) -> {Name, Parser@2} = _use0@1, gleam@result:'try'( parse_optional_directives(Parser@2), fun(_use0@2) -> {Directives, Parser@3} = _use0@2, gleam@result:'try'( expect_token(Parser@3, equals, <<"="/utf8>>), fun(_use0@3) -> {_, Parser@4} = _use0@3, gleam@result:'try'( parse_union_member_types(Parser@4), fun(_use0@4) -> {Members, Parser@5} = _use0@4, {ok, {{union_type_def, Name, Description, Directives, Members}, Parser@5}} end ) end ) end ) end ) end ). -file("src/mochi/sdl_parser.gleam", 330). ?DOC(" Parse: scalar DateTime\n"). -spec parse_scalar_type_definition( s_d_l_parser(), gleam@option:option(binary()) ) -> {ok, {mochi@sdl_ast:scalar_type_def(), s_d_l_parser()}} | {error, s_d_l_parse_error()}. parse_scalar_type_definition(Parser, Description) -> gleam@result:'try'( expect_token(Parser, scalar, <<"scalar"/utf8>>), fun(_use0) -> {_, Parser@1} = _use0, gleam@result:'try'( parse_name(Parser@1), fun(_use0@1) -> {Name, Parser@2} = _use0@1, gleam@result:'try'( parse_optional_directives(Parser@2), fun(_use0@2) -> {Directives, Parser@3} = _use0@2, {ok, {{scalar_type_def, Name, Description, Directives}, Parser@3}} end ) end ) end ). -file("src/mochi/sdl_parser.gleam", 895). -spec parse_optional_default_value(s_d_l_parser()) -> {ok, {gleam@option:option(mochi@sdl_ast:s_d_l_value()), s_d_l_parser()}} | {error, s_d_l_parse_error()}. parse_optional_default_value(Parser) -> case peek_token(Parser) of {ok, {s_d_l_token_with_position, equals, _}} -> gleam@result:'try'( consume_token(Parser), fun(_use0) -> {_, Parser@1} = _use0, gleam@result:'try'( parse_value(Parser@1), fun(_use0@1) -> {Value, Parser@2} = _use0@1, {ok, {{some, Value}, Parser@2}} end ) end ); _ -> {ok, {none, Parser}} end. -file("src/mochi/sdl_parser.gleam", 869). -spec parse_argument_definition(s_d_l_parser()) -> {ok, {mochi@sdl_ast:argument_def(), s_d_l_parser()}} | {error, s_d_l_parse_error()}. parse_argument_definition(Parser) -> {Description, Parser@1} = parse_optional_description(Parser), gleam@result:'try'( parse_name(Parser@1), fun(_use0) -> {Name, Parser@2} = _use0, gleam@result:'try'( expect_token(Parser@2, colon, <<":"/utf8>>), fun(_use0@1) -> {_, Parser@3} = _use0@1, gleam@result:'try'( parse_type(Parser@3), fun(_use0@2) -> {Arg_type, Parser@4} = _use0@2, gleam@result:'try'( parse_optional_default_value(Parser@4), fun(_use0@3) -> {Default_value, Parser@5} = _use0@3, gleam@result:'try'( parse_optional_directives(Parser@5), fun(_use0@4) -> {Directives, Parser@6} = _use0@4, {ok, {{argument_def, Name, Description, Arg_type, Default_value, Directives}, Parser@6}} end ) end ) end ) end ) end ). -file("src/mochi/sdl_parser.gleam", 837). -spec parse_argument_definitions( s_d_l_parser(), list(mochi@sdl_ast:argument_def()) ) -> {ok, {list(mochi@sdl_ast:argument_def()), s_d_l_parser()}} | {error, s_d_l_parse_error()}. parse_argument_definitions(Parser, Acc) -> case peek_token(Parser) of {ok, {s_d_l_token_with_position, right_paren, _}} -> {ok, {lists:reverse(Acc), Parser}}; {ok, {s_d_l_token_with_position, {name, _}, _}} -> gleam@result:'try'( parse_argument_definition(Parser), fun(_use0) -> {Argument, Parser@1} = _use0, parse_argument_definitions(Parser@1, [Argument | Acc]) end ); {ok, {s_d_l_token_with_position, type, _}} -> gleam@result:'try'( parse_argument_definition(Parser), fun(_use0) -> {Argument, Parser@1} = _use0, parse_argument_definitions(Parser@1, [Argument | Acc]) end ); {ok, {s_d_l_token_with_position, interface, _}} -> gleam@result:'try'( parse_argument_definition(Parser), fun(_use0) -> {Argument, Parser@1} = _use0, parse_argument_definitions(Parser@1, [Argument | Acc]) end ); {ok, {s_d_l_token_with_position, union, _}} -> gleam@result:'try'( parse_argument_definition(Parser), fun(_use0) -> {Argument, Parser@1} = _use0, parse_argument_definitions(Parser@1, [Argument | Acc]) end ); {ok, {s_d_l_token_with_position, scalar, _}} -> gleam@result:'try'( parse_argument_definition(Parser), fun(_use0) -> {Argument, Parser@1} = _use0, parse_argument_definitions(Parser@1, [Argument | Acc]) end ); {ok, {s_d_l_token_with_position, enum, _}} -> gleam@result:'try'( parse_argument_definition(Parser), fun(_use0) -> {Argument, Parser@1} = _use0, parse_argument_definitions(Parser@1, [Argument | Acc]) end ); {ok, {s_d_l_token_with_position, input, _}} -> gleam@result:'try'( parse_argument_definition(Parser), fun(_use0) -> {Argument, Parser@1} = _use0, parse_argument_definitions(Parser@1, [Argument | Acc]) end ); {ok, {s_d_l_token_with_position, directive, _}} -> gleam@result:'try'( parse_argument_definition(Parser), fun(_use0) -> {Argument, Parser@1} = _use0, parse_argument_definitions(Parser@1, [Argument | Acc]) end ); {ok, {s_d_l_token_with_position, schema, _}} -> gleam@result:'try'( parse_argument_definition(Parser), fun(_use0) -> {Argument, Parser@1} = _use0, parse_argument_definitions(Parser@1, [Argument | Acc]) end ); {ok, {s_d_l_token_with_position, extend, _}} -> gleam@result:'try'( parse_argument_definition(Parser), fun(_use0) -> {Argument, Parser@1} = _use0, parse_argument_definitions(Parser@1, [Argument | Acc]) end ); {ok, {s_d_l_token_with_position, implements, _}} -> gleam@result:'try'( parse_argument_definition(Parser), fun(_use0) -> {Argument, Parser@1} = _use0, parse_argument_definitions(Parser@1, [Argument | Acc]) end ); {ok, {s_d_l_token_with_position, {description, _}, _}} -> gleam@result:'try'( parse_argument_definition(Parser), fun(_use0) -> {Argument, Parser@1} = _use0, parse_argument_definitions(Parser@1, [Argument | Acc]) end ); {ok, {s_d_l_token_with_position, {string_value, _}, _}} -> gleam@result:'try'( parse_argument_definition(Parser), fun(_use0) -> {Argument, Parser@1} = _use0, parse_argument_definitions(Parser@1, [Argument | Acc]) end ); {ok, {s_d_l_token_with_position, Token, Position}} -> {error, {unexpected_token, <<"argument definition or ')'"/utf8>>, Token, Position}}; {error, Err} -> {error, Err} end. -file("src/mochi/sdl_parser.gleam", 817). -spec parse_optional_arguments_definition(s_d_l_parser()) -> {ok, {list(mochi@sdl_ast:argument_def()), s_d_l_parser()}} | {error, s_d_l_parse_error()}. parse_optional_arguments_definition(Parser) -> case peek_token(Parser) of {ok, {s_d_l_token_with_position, left_paren, _}} -> gleam@result:'try'( consume_token(Parser), fun(_use0) -> {_, Parser@1} = _use0, gleam@result:'try'( parse_argument_definitions(Parser@1, []), fun(_use0@1) -> {Arguments, Parser@2} = _use0@1, gleam@result:'try'( expect_token( Parser@2, right_paren, <<")"/utf8>> ), fun(_use0@2) -> {_, Parser@3} = _use0@2, {ok, {Arguments, Parser@3}} end ) end ) end ); _ -> {ok, {[], Parser}} end. -file("src/mochi/sdl_parser.gleam", 746). -spec parse_field_definition(s_d_l_parser()) -> {ok, {mochi@sdl_ast:field_def(), s_d_l_parser()}} | {error, s_d_l_parse_error()}. parse_field_definition(Parser) -> {Description, Parser@1} = parse_optional_description(Parser), gleam@result:'try'( parse_name(Parser@1), fun(_use0) -> {Name, Parser@2} = _use0, gleam@result:'try'( parse_optional_arguments_definition(Parser@2), fun(_use0@1) -> {Arguments, Parser@3} = _use0@1, gleam@result:'try'( expect_token(Parser@3, colon, <<":"/utf8>>), fun(_use0@2) -> {_, Parser@4} = _use0@2, gleam@result:'try'( parse_type(Parser@4), fun(_use0@3) -> {Field_type, Parser@5} = _use0@3, gleam@result:'try'( parse_optional_directives(Parser@5), fun(_use0@4) -> {Directives, Parser@6} = _use0@4, {ok, {{field_def, Name, Description, Arguments, Field_type, Directives}, Parser@6}} end ) end ) end ) end ) end ). -file("src/mochi/sdl_parser.gleam", 715). -spec parse_field_definitions(s_d_l_parser(), list(mochi@sdl_ast:field_def())) -> {ok, {list(mochi@sdl_ast:field_def()), s_d_l_parser()}} | {error, s_d_l_parse_error()}. parse_field_definitions(Parser, Acc) -> case peek_token(Parser) of {ok, {s_d_l_token_with_position, right_brace, _}} -> {ok, {lists:reverse(Acc), Parser}}; {ok, {s_d_l_token_with_position, {name, _}, _}} -> gleam@result:'try'( parse_field_definition(Parser), fun(_use0) -> {Field, Parser@1} = _use0, parse_field_definitions(Parser@1, [Field | Acc]) end ); {ok, {s_d_l_token_with_position, {description, _}, _}} -> gleam@result:'try'( parse_field_definition(Parser), fun(_use0) -> {Field, Parser@1} = _use0, parse_field_definitions(Parser@1, [Field | Acc]) end ); {ok, {s_d_l_token_with_position, {string_value, _}, _}} -> gleam@result:'try'( parse_field_definition(Parser), fun(_use0) -> {Field, Parser@1} = _use0, parse_field_definitions(Parser@1, [Field | Acc]) end ); {ok, {s_d_l_token_with_position, type, _}} -> gleam@result:'try'( parse_field_definition(Parser), fun(_use0) -> {Field, Parser@1} = _use0, parse_field_definitions(Parser@1, [Field | Acc]) end ); {ok, {s_d_l_token_with_position, interface, _}} -> gleam@result:'try'( parse_field_definition(Parser), fun(_use0) -> {Field, Parser@1} = _use0, parse_field_definitions(Parser@1, [Field | Acc]) end ); {ok, {s_d_l_token_with_position, union, _}} -> gleam@result:'try'( parse_field_definition(Parser), fun(_use0) -> {Field, Parser@1} = _use0, parse_field_definitions(Parser@1, [Field | Acc]) end ); {ok, {s_d_l_token_with_position, scalar, _}} -> gleam@result:'try'( parse_field_definition(Parser), fun(_use0) -> {Field, Parser@1} = _use0, parse_field_definitions(Parser@1, [Field | Acc]) end ); {ok, {s_d_l_token_with_position, enum, _}} -> gleam@result:'try'( parse_field_definition(Parser), fun(_use0) -> {Field, Parser@1} = _use0, parse_field_definitions(Parser@1, [Field | Acc]) end ); {ok, {s_d_l_token_with_position, input, _}} -> gleam@result:'try'( parse_field_definition(Parser), fun(_use0) -> {Field, Parser@1} = _use0, parse_field_definitions(Parser@1, [Field | Acc]) end ); {ok, {s_d_l_token_with_position, directive, _}} -> gleam@result:'try'( parse_field_definition(Parser), fun(_use0) -> {Field, Parser@1} = _use0, parse_field_definitions(Parser@1, [Field | Acc]) end ); {ok, {s_d_l_token_with_position, schema, _}} -> gleam@result:'try'( parse_field_definition(Parser), fun(_use0) -> {Field, Parser@1} = _use0, parse_field_definitions(Parser@1, [Field | Acc]) end ); {ok, {s_d_l_token_with_position, implements, _}} -> gleam@result:'try'( parse_field_definition(Parser), fun(_use0) -> {Field, Parser@1} = _use0, parse_field_definitions(Parser@1, [Field | Acc]) end ); {ok, {s_d_l_token_with_position, extend, _}} -> gleam@result:'try'( parse_field_definition(Parser), fun(_use0) -> {Field, Parser@1} = _use0, parse_field_definitions(Parser@1, [Field | Acc]) end ); {ok, {s_d_l_token_with_position, Token, Position}} -> {error, {unexpected_token, <<"field definition or '}'"/utf8>>, Token, Position}}; {error, Err} -> {error, Err} end. -file("src/mochi/sdl_parser.gleam", 676). -spec parse_fields_definition(s_d_l_parser()) -> {ok, {list(mochi@sdl_ast:field_def()), s_d_l_parser()}} | {error, s_d_l_parse_error()}. parse_fields_definition(Parser) -> gleam@result:'try'( expect_token(Parser, left_brace, <<"{"/utf8>>), fun(_use0) -> {_, Parser@1} = _use0, gleam@result:'try'( parse_field_definitions(Parser@1, []), fun(_use0@1) -> {Fields, Parser@2} = _use0@1, gleam@result:'try'( expect_token(Parser@2, right_brace, <<"}"/utf8>>), fun(_use0@2) -> {_, Parser@3} = _use0@2, {ok, {Fields, Parser@3}} end ) end ) end ). -file("src/mochi/sdl_parser.gleam", 251). ?DOC(" Parse: type User { ... }\n"). -spec parse_object_type_definition( s_d_l_parser(), gleam@option:option(binary()) ) -> {ok, {mochi@sdl_ast:object_type_def(), s_d_l_parser()}} | {error, s_d_l_parse_error()}. parse_object_type_definition(Parser, Description) -> gleam@result:'try'( expect_token(Parser, type, <<"type"/utf8>>), fun(_use0) -> {_, Parser@1} = _use0, gleam@result:'try'( parse_name(Parser@1), fun(_use0@1) -> {Name, Parser@2} = _use0@1, gleam@result:'try'( parse_optional_implements(Parser@2), fun(_use0@2) -> {Interfaces, Parser@3} = _use0@2, gleam@result:'try'( parse_optional_directives(Parser@3), fun(_use0@3) -> {Directives, Parser@4} = _use0@3, gleam@result:'try'( parse_fields_definition(Parser@4), fun(_use0@4) -> {Fields, Parser@5} = _use0@4, {ok, {{object_type_def, Name, Description, Interfaces, Directives, Fields}, Parser@5}} end ) end ) end ) end ) end ). -file("src/mochi/sdl_parser.gleam", 283). ?DOC(" Parse: interface Node { ... }\n"). -spec parse_interface_type_definition( s_d_l_parser(), gleam@option:option(binary()) ) -> {ok, {mochi@sdl_ast:interface_type_def(), s_d_l_parser()}} | {error, s_d_l_parse_error()}. parse_interface_type_definition(Parser, Description) -> gleam@result:'try'( expect_token(Parser, interface, <<"interface"/utf8>>), fun(_use0) -> {_, Parser@1} = _use0, gleam@result:'try'( parse_name(Parser@1), fun(_use0@1) -> {Name, Parser@2} = _use0@1, gleam@result:'try'( parse_optional_directives(Parser@2), fun(_use0@2) -> {Directives, Parser@3} = _use0@2, gleam@result:'try'( parse_fields_definition(Parser@3), fun(_use0@3) -> {Fields, Parser@4} = _use0@3, {ok, {{interface_type_def, Name, Description, Directives, Fields}, Parser@4}} end ) end ) end ) end ). -file("src/mochi/sdl_parser.gleam", 685). -spec parse_optional_fields_definition(s_d_l_parser()) -> {ok, {list(mochi@sdl_ast:field_def()), s_d_l_parser()}} | {error, s_d_l_parse_error()}. parse_optional_fields_definition(Parser) -> case peek_token(Parser) of {ok, {s_d_l_token_with_position, left_brace, _}} -> parse_fields_definition(Parser); _ -> {ok, {[], Parser}} end. -file("src/mochi/sdl_parser.gleam", 952). -spec parse_directive_definition(s_d_l_parser(), gleam@option:option(binary())) -> {ok, {mochi@sdl_ast:directive_def(), s_d_l_parser()}} | {error, s_d_l_parse_error()}. parse_directive_definition(Parser, Description) -> gleam@result:'try'( expect_token(Parser, directive, <<"directive"/utf8>>), fun(_use0) -> {_, Parser@1} = _use0, gleam@result:'try'( expect_token(Parser@1, at, <<"@"/utf8>>), fun(_use0@1) -> {_, Parser@2} = _use0@1, gleam@result:'try'( parse_name(Parser@2), fun(_use0@2) -> {Name, Parser@3} = _use0@2, gleam@result:'try'( parse_optional_arguments_definition(Parser@3), fun(_use0@3) -> {Arguments, Parser@4} = _use0@3, gleam@result:'try'( case peek_token(Parser@4) of {ok, {s_d_l_token_with_position, {name, <<"repeatable"/utf8>>}, _}} -> gleam@result:'try'( consume_token(Parser@4), fun(_use0@4) -> {_, Parser@5} = _use0@4, {ok, {true, Parser@5}} end ); _ -> {ok, {false, Parser@4}} end, fun(_use0@5) -> {Repeatable, Parser@6} = _use0@5, gleam@result:'try'( case peek_token(Parser@6) of {ok, {s_d_l_token_with_position, {name, <<"on"/utf8>>}, _}} -> gleam@result:'try'( consume_token( Parser@6 ), fun(_use0@6) -> {_, Parser@7} = _use0@6, parse_directive_locations( Parser@7 ) end ); _ -> {ok, {[], Parser@6}} end, fun(_use0@7) -> {Locations, Parser@8} = _use0@7, {ok, {{directive_def, Name, Description, Locations, Arguments, Repeatable}, Parser@8}} end ) end ) end ) end ) end ) end ). -file("src/mochi/sdl_parser.gleam", 1088). -spec parse_object_field_values( s_d_l_parser(), list(mochi@sdl_ast:object_field_value()) ) -> {ok, {list(mochi@sdl_ast:object_field_value()), s_d_l_parser()}} | {error, s_d_l_parse_error()}. parse_object_field_values(Parser, Acc) -> case peek_token(Parser) of {ok, {s_d_l_token_with_position, right_brace, _}} -> gleam@result:'try'( consume_token(Parser), fun(_use0) -> {_, Parser@1} = _use0, {ok, {lists:reverse(Acc), Parser@1}} end ); {ok, _} -> gleam@result:'try'( parse_name(Parser), fun(_use0@1) -> {Name, Parser@2} = _use0@1, gleam@result:'try'( expect_token(Parser@2, colon, <<":"/utf8>>), fun(_use0@2) -> {_, Parser@3} = _use0@2, gleam@result:'try'( parse_value(Parser@3), fun(_use0@3) -> {Value, Parser@4} = _use0@3, parse_object_field_values( Parser@4, [{object_field_value, Name, Value} | Acc] ) end ) end ) end ); {error, Err} -> {error, Err} end. -file("src/mochi/sdl_parser.gleam", 1169). -spec parse_enum_value_definition(s_d_l_parser()) -> {ok, {mochi@sdl_ast:enum_value_def(), s_d_l_parser()}} | {error, s_d_l_parse_error()}. parse_enum_value_definition(Parser) -> {Description, Parser@1} = parse_optional_description(Parser), gleam@result:'try'( parse_name(Parser@1), fun(_use0) -> {Name, Parser@2} = _use0, gleam@result:'try'( parse_optional_directives(Parser@2), fun(_use0@1) -> {Directives, Parser@3} = _use0@1, {ok, {{enum_value_def, Name, Description, Directives}, Parser@3}} end ) end ). -file("src/mochi/sdl_parser.gleam", 1148). -spec parse_enum_values(s_d_l_parser(), list(mochi@sdl_ast:enum_value_def())) -> {ok, {list(mochi@sdl_ast:enum_value_def()), s_d_l_parser()}} | {error, s_d_l_parse_error()}. parse_enum_values(Parser, Acc) -> case peek_token(Parser) of {ok, {s_d_l_token_with_position, right_brace, _}} -> {ok, {lists:reverse(Acc), Parser}}; {ok, {s_d_l_token_with_position, {name, _}, _}} -> gleam@result:'try'( parse_enum_value_definition(Parser), fun(_use0) -> {Enum_value, Parser@1} = _use0, parse_enum_values(Parser@1, [Enum_value | Acc]) end ); {ok, {s_d_l_token_with_position, {description, _}, _}} -> gleam@result:'try'( parse_enum_value_definition(Parser), fun(_use0) -> {Enum_value, Parser@1} = _use0, parse_enum_values(Parser@1, [Enum_value | Acc]) end ); {ok, {s_d_l_token_with_position, {string_value, _}, _}} -> gleam@result:'try'( parse_enum_value_definition(Parser), fun(_use0) -> {Enum_value, Parser@1} = _use0, parse_enum_values(Parser@1, [Enum_value | Acc]) end ); {ok, {s_d_l_token_with_position, Token, Position}} -> {error, {unexpected_token, <<"enum value or '}'"/utf8>>, Token, Position}}; {error, Err} -> {error, Err} end. -file("src/mochi/sdl_parser.gleam", 1139). -spec parse_enum_values_definition(s_d_l_parser()) -> {ok, {list(mochi@sdl_ast:enum_value_def()), s_d_l_parser()}} | {error, s_d_l_parse_error()}. parse_enum_values_definition(Parser) -> gleam@result:'try'( expect_token(Parser, left_brace, <<"{"/utf8>>), fun(_use0) -> {_, Parser@1} = _use0, gleam@result:'try'( parse_enum_values(Parser@1, []), fun(_use0@1) -> {Values, Parser@2} = _use0@1, gleam@result:'try'( expect_token(Parser@2, right_brace, <<"}"/utf8>>), fun(_use0@2) -> {_, Parser@3} = _use0@2, {ok, {Values, Parser@3}} end ) end ) end ). -file("src/mochi/sdl_parser.gleam", 353). ?DOC(" Parse: enum Status { ACTIVE INACTIVE }\n"). -spec parse_enum_type_definition(s_d_l_parser(), gleam@option:option(binary())) -> {ok, {mochi@sdl_ast:enum_type_def(), s_d_l_parser()}} | {error, s_d_l_parse_error()}. parse_enum_type_definition(Parser, Description) -> gleam@result:'try'( expect_token(Parser, enum, <<"enum"/utf8>>), fun(_use0) -> {_, Parser@1} = _use0, gleam@result:'try'( parse_name(Parser@1), fun(_use0@1) -> {Name, Parser@2} = _use0@1, gleam@result:'try'( parse_optional_directives(Parser@2), fun(_use0@2) -> {Directives, Parser@3} = _use0@2, gleam@result:'try'( parse_enum_values_definition(Parser@3), fun(_use0@3) -> {Values, Parser@4} = _use0@3, {ok, {{enum_type_def, Name, Description, Directives, Values}, Parser@4}} end ) end ) end ) end ). -file("src/mochi/sdl_parser.gleam", 695). -spec parse_optional_enum_values_definition(s_d_l_parser()) -> {ok, {list(mochi@sdl_ast:enum_value_def()), s_d_l_parser()}} | {error, s_d_l_parse_error()}. parse_optional_enum_values_definition(Parser) -> case peek_token(Parser) of {ok, {s_d_l_token_with_position, left_brace, _}} -> parse_enum_values_definition(Parser); _ -> {ok, {[], Parser}} end. -file("src/mochi/sdl_parser.gleam", 1226). -spec parse_input_field_definition(s_d_l_parser()) -> {ok, {mochi@sdl_ast:input_field_def(), s_d_l_parser()}} | {error, s_d_l_parse_error()}. parse_input_field_definition(Parser) -> {Description, Parser@1} = parse_optional_description(Parser), gleam@result:'try'( parse_name(Parser@1), fun(_use0) -> {Name, Parser@2} = _use0, gleam@result:'try'( expect_token(Parser@2, colon, <<":"/utf8>>), fun(_use0@1) -> {_, Parser@3} = _use0@1, gleam@result:'try'( parse_type(Parser@3), fun(_use0@2) -> {Field_type, Parser@4} = _use0@2, gleam@result:'try'( parse_optional_default_value(Parser@4), fun(_use0@3) -> {Default_value, Parser@5} = _use0@3, gleam@result:'try'( parse_optional_directives(Parser@5), fun(_use0@4) -> {Directives, Parser@6} = _use0@4, {ok, {{input_field_def, Name, Description, Field_type, Default_value, Directives}, Parser@6}} end ) end ) end ) end ) end ). -file("src/mochi/sdl_parser.gleam", 1197). -spec parse_input_fields(s_d_l_parser(), list(mochi@sdl_ast:input_field_def())) -> {ok, {list(mochi@sdl_ast:input_field_def()), s_d_l_parser()}} | {error, s_d_l_parse_error()}. parse_input_fields(Parser, Acc) -> case peek_token(Parser) of {ok, {s_d_l_token_with_position, right_brace, _}} -> {ok, {lists:reverse(Acc), Parser}}; {ok, {s_d_l_token_with_position, {name, _}, _}} -> gleam@result:'try'( parse_input_field_definition(Parser), fun(_use0) -> {Field, Parser@1} = _use0, parse_input_fields(Parser@1, [Field | Acc]) end ); {ok, {s_d_l_token_with_position, {description, _}, _}} -> gleam@result:'try'( parse_input_field_definition(Parser), fun(_use0) -> {Field, Parser@1} = _use0, parse_input_fields(Parser@1, [Field | Acc]) end ); {ok, {s_d_l_token_with_position, {string_value, _}, _}} -> gleam@result:'try'( parse_input_field_definition(Parser), fun(_use0) -> {Field, Parser@1} = _use0, parse_input_fields(Parser@1, [Field | Acc]) end ); {ok, {s_d_l_token_with_position, type, _}} -> gleam@result:'try'( parse_input_field_definition(Parser), fun(_use0) -> {Field, Parser@1} = _use0, parse_input_fields(Parser@1, [Field | Acc]) end ); {ok, {s_d_l_token_with_position, interface, _}} -> gleam@result:'try'( parse_input_field_definition(Parser), fun(_use0) -> {Field, Parser@1} = _use0, parse_input_fields(Parser@1, [Field | Acc]) end ); {ok, {s_d_l_token_with_position, union, _}} -> gleam@result:'try'( parse_input_field_definition(Parser), fun(_use0) -> {Field, Parser@1} = _use0, parse_input_fields(Parser@1, [Field | Acc]) end ); {ok, {s_d_l_token_with_position, scalar, _}} -> gleam@result:'try'( parse_input_field_definition(Parser), fun(_use0) -> {Field, Parser@1} = _use0, parse_input_fields(Parser@1, [Field | Acc]) end ); {ok, {s_d_l_token_with_position, enum, _}} -> gleam@result:'try'( parse_input_field_definition(Parser), fun(_use0) -> {Field, Parser@1} = _use0, parse_input_fields(Parser@1, [Field | Acc]) end ); {ok, {s_d_l_token_with_position, input, _}} -> gleam@result:'try'( parse_input_field_definition(Parser), fun(_use0) -> {Field, Parser@1} = _use0, parse_input_fields(Parser@1, [Field | Acc]) end ); {ok, {s_d_l_token_with_position, directive, _}} -> gleam@result:'try'( parse_input_field_definition(Parser), fun(_use0) -> {Field, Parser@1} = _use0, parse_input_fields(Parser@1, [Field | Acc]) end ); {ok, {s_d_l_token_with_position, schema, _}} -> gleam@result:'try'( parse_input_field_definition(Parser), fun(_use0) -> {Field, Parser@1} = _use0, parse_input_fields(Parser@1, [Field | Acc]) end ); {ok, {s_d_l_token_with_position, implements, _}} -> gleam@result:'try'( parse_input_field_definition(Parser), fun(_use0) -> {Field, Parser@1} = _use0, parse_input_fields(Parser@1, [Field | Acc]) end ); {ok, {s_d_l_token_with_position, extend, _}} -> gleam@result:'try'( parse_input_field_definition(Parser), fun(_use0) -> {Field, Parser@1} = _use0, parse_input_fields(Parser@1, [Field | Acc]) end ); {ok, {s_d_l_token_with_position, Token, Position}} -> {error, {unexpected_token, <<"input field or '}'"/utf8>>, Token, Position}}; {error, Err} -> {error, Err} end. -file("src/mochi/sdl_parser.gleam", 1188). -spec parse_input_fields_definition(s_d_l_parser()) -> {ok, {list(mochi@sdl_ast:input_field_def()), s_d_l_parser()}} | {error, s_d_l_parse_error()}. parse_input_fields_definition(Parser) -> gleam@result:'try'( expect_token(Parser, left_brace, <<"{"/utf8>>), fun(_use0) -> {_, Parser@1} = _use0, gleam@result:'try'( parse_input_fields(Parser@1, []), fun(_use0@1) -> {Fields, Parser@2} = _use0@1, gleam@result:'try'( expect_token(Parser@2, right_brace, <<"}"/utf8>>), fun(_use0@2) -> {_, Parser@3} = _use0@2, {ok, {Fields, Parser@3}} end ) end ) end ). -file("src/mochi/sdl_parser.gleam", 374). ?DOC(" Parse: input CreateUserInput { ... }\n"). -spec parse_input_object_type_definition( s_d_l_parser(), gleam@option:option(binary()) ) -> {ok, {mochi@sdl_ast:input_object_type_def(), s_d_l_parser()}} | {error, s_d_l_parse_error()}. parse_input_object_type_definition(Parser, Description) -> gleam@result:'try'( expect_token(Parser, input, <<"input"/utf8>>), fun(_use0) -> {_, Parser@1} = _use0, gleam@result:'try'( parse_name(Parser@1), fun(_use0@1) -> {Name, Parser@2} = _use0@1, gleam@result:'try'( parse_optional_directives(Parser@2), fun(_use0@2) -> {Directives, Parser@3} = _use0@2, gleam@result:'try'( parse_input_fields_definition(Parser@3), fun(_use0@3) -> {Fields, Parser@4} = _use0@3, {ok, {{input_object_type_def, Name, Description, Directives, Fields}, Parser@4}} end ) end ) end ) end ). -file("src/mochi/sdl_parser.gleam", 705). -spec parse_optional_input_fields_definition(s_d_l_parser()) -> {ok, {list(mochi@sdl_ast:input_field_def()), s_d_l_parser()}} | {error, s_d_l_parse_error()}. parse_optional_input_fields_definition(Parser) -> case peek_token(Parser) of {ok, {s_d_l_token_with_position, left_brace, _}} -> parse_input_fields_definition(Parser); _ -> {ok, {[], Parser}} end. -file("src/mochi/sdl_parser.gleam", 394). -spec parse_type_extension(s_d_l_parser()) -> {ok, {mochi@sdl_ast:type_extension_def(), s_d_l_parser()}} | {error, s_d_l_parse_error()}. parse_type_extension(Parser) -> gleam@result:'try'( expect_token(Parser, extend, <<"extend"/utf8>>), fun(_use0) -> {_, Parser@1} = _use0, case peek_token(Parser@1) of {ok, {s_d_l_token_with_position, type, _}} -> gleam@result:'try'( expect_token(Parser@1, type, <<"type"/utf8>>), fun(_use0@1) -> {_, Parser@2} = _use0@1, gleam@result:'try'( parse_name(Parser@2), fun(_use0@2) -> {Name, Parser@3} = _use0@2, gleam@result:'try'( parse_optional_implements(Parser@3), fun(_use0@3) -> {Interfaces, Parser@4} = _use0@3, gleam@result:'try'( parse_optional_directives( Parser@4 ), fun(_use0@4) -> {Directives, Parser@5} = _use0@4, gleam@result:'try'( parse_optional_fields_definition( Parser@5 ), fun(_use0@5) -> {Fields, Parser@6} = _use0@5, gleam@result:'try'( case {Interfaces, Directives, Fields} of {[], [], []} -> {error, {invalid_type_definition, <<<<"extend type '"/utf8, Name/binary>>/binary, "' must have implements, directives, or fields"/utf8>>, case peek_token( Parser@6 ) of {ok, {s_d_l_token_with_position, _, Pos}} -> Pos; _ -> {position, 0, 0} end}}; {_, _, _} -> {ok, nil} end, fun(_) -> {ok, {{object_type_extension, Name, Interfaces, Directives, Fields}, Parser@6}} end ) end ) end ) end ) end ) end ); {ok, {s_d_l_token_with_position, interface, _}} -> gleam@result:'try'( expect_token(Parser@1, interface, <<"interface"/utf8>>), fun(_use0@6) -> {_, Parser@7} = _use0@6, gleam@result:'try'( parse_name(Parser@7), fun(_use0@7) -> {Name@1, Parser@8} = _use0@7, gleam@result:'try'( parse_optional_directives(Parser@8), fun(_use0@8) -> {Directives@1, Parser@9} = _use0@8, gleam@result:'try'( parse_optional_fields_definition( Parser@9 ), fun(_use0@9) -> {Fields@1, Parser@10} = _use0@9, gleam@result:'try'( case {Directives@1, Fields@1} of {[], []} -> {error, {invalid_type_definition, <<<<"extend interface '"/utf8, Name@1/binary>>/binary, "' must have directives or fields"/utf8>>, case peek_token( Parser@10 ) of {ok, {s_d_l_token_with_position, _, Pos@1}} -> Pos@1; _ -> {position, 0, 0} end}}; {_, _} -> {ok, nil} end, fun(_) -> {ok, {{interface_type_extension, Name@1, Directives@1, Fields@1}, Parser@10}} end ) end ) end ) end ) end ); {ok, {s_d_l_token_with_position, union, _}} -> gleam@result:'try'( expect_token(Parser@1, union, <<"union"/utf8>>), fun(_use0@10) -> {_, Parser@11} = _use0@10, gleam@result:'try'( parse_name(Parser@11), fun(_use0@11) -> {Name@2, Parser@12} = _use0@11, gleam@result:'try'( parse_optional_directives(Parser@12), fun(_use0@12) -> {Directives@2, Parser@13} = _use0@12, gleam@result:'try'( case peek_token(Parser@13) of {ok, {s_d_l_token_with_position, equals, _}} -> gleam@result:'try'( consume_token( Parser@13 ), fun(_use0@13) -> {_, Parser@14} = _use0@13, parse_union_member_types( Parser@14 ) end ); _ -> {ok, {[], Parser@13}} end, fun(_use0@14) -> {Members, Parser@15} = _use0@14, gleam@result:'try'( case {Directives@2, Members} of {[], []} -> {error, {invalid_type_definition, <<<<"extend union '"/utf8, Name@2/binary>>/binary, "' must have directives or member types"/utf8>>, case peek_token( Parser@15 ) of {ok, {s_d_l_token_with_position, _, Pos@2}} -> Pos@2; _ -> {position, 0, 0} end}}; {_, _} -> {ok, nil} end, fun(_) -> {ok, {{union_type_extension, Name@2, Directives@2, Members}, Parser@15}} end ) end ) end ) end ) end ); {ok, {s_d_l_token_with_position, enum, _}} -> gleam@result:'try'( expect_token(Parser@1, enum, <<"enum"/utf8>>), fun(_use0@15) -> {_, Parser@16} = _use0@15, gleam@result:'try'( parse_name(Parser@16), fun(_use0@16) -> {Name@3, Parser@17} = _use0@16, gleam@result:'try'( parse_optional_directives(Parser@17), fun(_use0@17) -> {Directives@3, Parser@18} = _use0@17, gleam@result:'try'( parse_optional_enum_values_definition( Parser@18 ), fun(_use0@18) -> {Values, Parser@19} = _use0@18, gleam@result:'try'( case {Directives@3, Values} of {[], []} -> {error, {invalid_type_definition, <<<<"extend enum '"/utf8, Name@3/binary>>/binary, "' must have directives or values"/utf8>>, case peek_token( Parser@19 ) of {ok, {s_d_l_token_with_position, _, Pos@3}} -> Pos@3; _ -> {position, 0, 0} end}}; {_, _} -> {ok, nil} end, fun(_) -> {ok, {{enum_type_extension, Name@3, Directives@3, Values}, Parser@19}} end ) end ) end ) end ) end ); {ok, {s_d_l_token_with_position, input, _}} -> gleam@result:'try'( expect_token(Parser@1, input, <<"input"/utf8>>), fun(_use0@19) -> {_, Parser@20} = _use0@19, gleam@result:'try'( parse_name(Parser@20), fun(_use0@20) -> {Name@4, Parser@21} = _use0@20, gleam@result:'try'( parse_optional_directives(Parser@21), fun(_use0@21) -> {Directives@4, Parser@22} = _use0@21, gleam@result:'try'( parse_optional_input_fields_definition( Parser@22 ), fun(_use0@22) -> {Fields@2, Parser@23} = _use0@22, gleam@result:'try'( case {Directives@4, Fields@2} of {[], []} -> {error, {invalid_type_definition, <<<<"extend input '"/utf8, Name@4/binary>>/binary, "' must have directives or fields"/utf8>>, case peek_token( Parser@23 ) of {ok, {s_d_l_token_with_position, _, Pos@4}} -> Pos@4; _ -> {position, 0, 0} end}}; {_, _} -> {ok, nil} end, fun(_) -> {ok, {{input_object_type_extension, Name@4, Directives@4, Fields@2}, Parser@23}} end ) end ) end ) end ) end ); {ok, {s_d_l_token_with_position, scalar, _}} -> gleam@result:'try'( expect_token(Parser@1, scalar, <<"scalar"/utf8>>), fun(_use0@23) -> {_, Parser@24} = _use0@23, gleam@result:'try'( parse_name(Parser@24), fun(_use0@24) -> {Name@5, Parser@25} = _use0@24, gleam@result:'try'( parse_optional_directives(Parser@25), fun(_use0@25) -> {Directives@5, Parser@26} = _use0@25, gleam@result:'try'( case Directives@5 of [] -> {error, {invalid_type_definition, <<<<"extend scalar '"/utf8, Name@5/binary>>/binary, "' must have at least one directive"/utf8>>, case peek_token( Parser@26 ) of {ok, {s_d_l_token_with_position, _, Pos@5}} -> Pos@5; _ -> {position, 0, 0} end}}; _ -> {ok, nil} end, fun(_) -> {ok, {{scalar_type_extension, Name@5, Directives@5}, Parser@26}} end ) end ) end ) end ); {ok, {s_d_l_token_with_position, Token, Position}} -> {error, {unexpected_token, <<"type/interface/union/enum/input/scalar after extend"/utf8>>, Token, Position}}; {error, Err} -> {error, Err} end end ). -file("src/mochi/sdl_parser.gleam", 69). -spec parse_type_system_definition(s_d_l_parser()) -> {ok, {mochi@sdl_ast:type_system_definition(), s_d_l_parser()}} | {error, s_d_l_parse_error()}. parse_type_system_definition(Parser) -> {Description, Parser@1} = parse_optional_description(Parser), case peek_token(Parser@1) of {ok, {s_d_l_token_with_position, type, _}} -> _pipe = parse_object_type_definition(Parser@1, Description), gleam@result:map( _pipe, fun(Result) -> {{type_definition, {object_type_definition, erlang:element(1, Result)}}, erlang:element(2, Result)} end ); {ok, {s_d_l_token_with_position, interface, _}} -> _pipe@1 = parse_interface_type_definition(Parser@1, Description), gleam@result:map( _pipe@1, fun(Result@1) -> {{type_definition, {interface_type_definition, erlang:element(1, Result@1)}}, erlang:element(2, Result@1)} end ); {ok, {s_d_l_token_with_position, union, _}} -> _pipe@2 = parse_union_type_definition(Parser@1, Description), gleam@result:map( _pipe@2, fun(Result@2) -> {{type_definition, {union_type_definition, erlang:element(1, Result@2)}}, erlang:element(2, Result@2)} end ); {ok, {s_d_l_token_with_position, scalar, _}} -> _pipe@3 = parse_scalar_type_definition(Parser@1, Description), gleam@result:map( _pipe@3, fun(Result@3) -> {{type_definition, {scalar_type_definition, erlang:element(1, Result@3)}}, erlang:element(2, Result@3)} end ); {ok, {s_d_l_token_with_position, enum, _}} -> _pipe@4 = parse_enum_type_definition(Parser@1, Description), gleam@result:map( _pipe@4, fun(Result@4) -> {{type_definition, {enum_type_definition, erlang:element(1, Result@4)}}, erlang:element(2, Result@4)} end ); {ok, {s_d_l_token_with_position, input, _}} -> _pipe@5 = parse_input_object_type_definition(Parser@1, Description), gleam@result:map( _pipe@5, fun(Result@5) -> {{type_definition, {input_object_type_definition, erlang:element(1, Result@5)}}, erlang:element(2, Result@5)} end ); {ok, {s_d_l_token_with_position, extend, _}} -> _pipe@6 = parse_type_extension(Parser@1), gleam@result:map( _pipe@6, fun(Result@6) -> {{type_extension, erlang:element(1, Result@6)}, erlang:element(2, Result@6)} end ); {ok, {s_d_l_token_with_position, directive, _}} -> _pipe@7 = parse_directive_definition(Parser@1, Description), gleam@result:map( _pipe@7, fun(Result@7) -> {{directive_definition, erlang:element(1, Result@7)}, erlang:element(2, Result@7)} end ); {ok, {s_d_l_token_with_position, Token, Position}} -> {error, {unexpected_token, <<"type definition"/utf8>>, Token, Position}}; {error, Err} -> {error, Err} end. -file("src/mochi/sdl_parser.gleam", 52). -spec parse_definitions( s_d_l_parser(), list(mochi@sdl_ast:type_system_definition()) ) -> {ok, {list(mochi@sdl_ast:type_system_definition()), s_d_l_parser()}} | {error, s_d_l_parse_error()}. parse_definitions(Parser, Acc) -> case peek_token(Parser) of {ok, {s_d_l_token_with_position, e_o_f, _}} -> {ok, {lists:reverse(Acc), Parser}}; {ok, _} -> gleam@result:'try'( parse_type_system_definition(Parser), fun(_use0) -> {Definition, Parser@1} = _use0, parse_definitions(Parser@1, [Definition | Acc]) end ); {error, Err} -> {error, Err} end. -file("src/mochi/sdl_parser.gleam", 45). -spec parse_document(s_d_l_parser()) -> {ok, {mochi@sdl_ast:s_d_l_document(), s_d_l_parser()}} | {error, s_d_l_parse_error()}. parse_document(Parser) -> gleam@result:'try'( parse_definitions(Parser, []), fun(_use0) -> {Definitions, Parser@1} = _use0, {ok, {{s_d_l_document, Definitions}, Parser@1}} end ). -file("src/mochi/sdl_parser.gleam", 35). ?DOC(" Parse SDL string into an AST\n"). -spec parse_sdl(binary()) -> {ok, mochi@sdl_ast:s_d_l_document()} | {error, s_d_l_parse_error()}. parse_sdl(Input) -> Parser = advance(mochi@sdl_lexer:new_sdl_lexer(Input)), case erlang:element(3, Parser) of {error, Err} -> {error, {s_d_l_lex_error, Err}}; {ok, _} -> _pipe = parse_document(Parser), gleam@result:map( _pipe, fun(Result) -> erlang:element(1, Result) end ) end.