-module(lightspeed@agent@typestate).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/lightspeed/agent/typestate.gleam").
-export([new/1, handshake/1, mount/1, go_live/1, drain/1, terminate/1, id/1, lifecycle/1, lifecycle_to_string/1]).
-export_type([disconnected/0, handshaking/0, mounted/0, live/0, draining/0, terminated/0, lifecycle/0, agent/1]).
-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(" Typestate lifecycle for Lightspeed session agents.\n").
-type disconnected() :: disconnected.
-type handshaking() :: handshaking.
-type mounted() :: mounted.
-type live() :: live.
-type draining() :: draining.
-type terminated() :: terminated.
-type lifecycle() :: disconnected_label |
handshaking_label |
mounted_label |
live_label |
draining_label |
terminated_label.
-opaque agent(FGD) :: {agent, binary(), lifecycle()} | {gleam_phantom, FGD}.
-file("src/lightspeed/agent/typestate.gleam", 49).
?DOC(" Create a disconnected agent.\n").
-spec new(binary()) -> agent(disconnected()).
new(Id) ->
{agent, Id, disconnected_label}.
-file("src/lightspeed/agent/typestate.gleam", 54).
?DOC(" Transition from disconnected to handshaking.\n").
-spec handshake(agent(disconnected())) -> agent(handshaking()).
handshake(Agent) ->
{agent, erlang:element(2, Agent), handshaking_label}.
-file("src/lightspeed/agent/typestate.gleam", 59).
?DOC(" Transition from handshaking to mounted.\n").
-spec mount(agent(handshaking())) -> agent(mounted()).
mount(Agent) ->
{agent, erlang:element(2, Agent), mounted_label}.
-file("src/lightspeed/agent/typestate.gleam", 64).
?DOC(" Transition from mounted to live.\n").
-spec go_live(agent(mounted())) -> agent(live()).
go_live(Agent) ->
{agent, erlang:element(2, Agent), live_label}.
-file("src/lightspeed/agent/typestate.gleam", 69).
?DOC(" Transition from live to draining.\n").
-spec drain(agent(live())) -> agent(draining()).
drain(Agent) ->
{agent, erlang:element(2, Agent), draining_label}.
-file("src/lightspeed/agent/typestate.gleam", 74).
?DOC(" Transition from draining to terminated.\n").
-spec terminate(agent(draining())) -> agent(terminated()).
terminate(Agent) ->
{agent, erlang:element(2, Agent), terminated_label}.
-file("src/lightspeed/agent/typestate.gleam", 79).
?DOC(" Return the agent id.\n").
-spec id(agent(any())) -> binary().
id(Agent) ->
erlang:element(2, Agent).
-file("src/lightspeed/agent/typestate.gleam", 84).
?DOC(" Return the lifecycle label.\n").
-spec lifecycle(agent(any())) -> lifecycle().
lifecycle(Agent) ->
erlang:element(3, Agent).
-file("src/lightspeed/agent/typestate.gleam", 89).
?DOC(" Convert a lifecycle label to a stable string.\n").
-spec lifecycle_to_string(lifecycle()) -> binary().
lifecycle_to_string(Lifecycle) ->
case Lifecycle of
disconnected_label ->
<<"disconnected"/utf8>>;
handshaking_label ->
<<"handshaking"/utf8>>;
mounted_label ->
<<"mounted"/utf8>>;
live_label ->
<<"live"/utf8>>;
draining_label ->
<<"draining"/utf8>>;
terminated_label ->
<<"terminated"/utf8>>
end.