src/lightspeed@agent@isa.erl

-module(lightspeed@agent@isa).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/lightspeed/agent/isa.gleam").
-export([opcode/1, is_client_instruction/1, is_server_instruction/1, describe/1]).
-export_type([instruction/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.

?MODULEDOC(" Orthogonal instruction set for the Lightspeed runtime.\n").

-type instruction() :: {mount, binary(), binary()} |
    {render, binary()} |
    {patch, binary(), binary()} |
    {push_event, binary(), binary()} |
    {navigate, binary()} |
    {subscribe, binary()} |
    {unsubscribe, binary()} |
    {shutdown, binary()}.

-file("src/lightspeed/agent/isa.gleam", 16).
?DOC(" Stable opcode string for logs, tests, and protocol mapping.\n").
-spec opcode(instruction()) -> binary().
opcode(Instruction) ->
    case Instruction of
        {mount, _, _} ->
            <<"mount"/utf8>>;

        {render, _} ->
            <<"render"/utf8>>;

        {patch, _, _} ->
            <<"patch"/utf8>>;

        {push_event, _, _} ->
            <<"push_event"/utf8>>;

        {navigate, _} ->
            <<"navigate"/utf8>>;

        {subscribe, _} ->
            <<"subscribe"/utf8>>;

        {unsubscribe, _} ->
            <<"unsubscribe"/utf8>>;

        {shutdown, _} ->
            <<"shutdown"/utf8>>
    end.

-file("src/lightspeed/agent/isa.gleam", 30).
?DOC(" True when the instruction is intended for the browser/client runtime.\n").
-spec is_client_instruction(instruction()) -> boolean().
is_client_instruction(Instruction) ->
    case Instruction of
        {patch, _, _} ->
            true;

        {navigate, _} ->
            true;

        _ ->
            false
    end.

-file("src/lightspeed/agent/isa.gleam", 39).
?DOC(" True when the instruction is intended for the server runtime.\n").
-spec is_server_instruction(instruction()) -> boolean().
is_server_instruction(Instruction) ->
    case Instruction of
        {mount, _, _} ->
            true;

        {render, _} ->
            true;

        {push_event, _, _} ->
            true;

        {subscribe, _} ->
            true;

        {unsubscribe, _} ->
            true;

        {shutdown, _} ->
            true;

        _ ->
            false
    end.

-file("src/lightspeed/agent/isa.gleam", 52).
?DOC(" Human-readable instruction summary for traces.\n").
-spec describe(instruction()) -> binary().
describe(Instruction) ->
    case Instruction of
        {mount, Route, _} ->
            <<"mount "/utf8, Route/binary>>;

        {render, View_id} ->
            <<"render "/utf8, View_id/binary>>;

        {patch, Target, _} ->
            <<"patch "/utf8, Target/binary>>;

        {push_event, Name, _} ->
            <<"push_event "/utf8, Name/binary>>;

        {navigate, To} ->
            <<"navigate "/utf8, To/binary>>;

        {subscribe, Topic} ->
            <<"subscribe "/utf8, Topic/binary>>;

        {unsubscribe, Topic@1} ->
            <<"unsubscribe "/utf8, Topic@1/binary>>;

        {shutdown, Reason} ->
            <<"shutdown "/utf8, Reason/binary>>
    end.