Packages
spawn_sdk
1.4.0
2.0.0-RC9
2.0.0-RC8
2.0.0-RC7
2.0.0-RC6
2.0.0-RC5
2.0.0-RC4
2.0.0-RC3
2.0.0-RC14
2.0.0-RC13
2.0.0-RC12
2.0.0-RC11
2.0.0-RC10
1.4.3
1.4.2
1.4.1
1.4.0
1.3.3
1.3.2
1.3.1
1.3.0
1.2.1
1.2.0
1.1.1
1.1.0
1.0.1
1.0.0
1.0.0-rc3
1.0.0-rc16
1.0.0-rc1
1.0.0-rc.38
1.0.0-rc.37
1.0.0-rc.36
1.0.0-rc.35
1.0.0-rc.34
1.0.0-rc.33
1.0.0-rc.32
1.0.0-rc.31
1.0.0-rc.30
1.0.0-rc.29
1.0.0-rc.28
1.0.0-rc.27
1.0.0-rc.26
1.0.0-rc.25
1.0.0-rc.24
1.0.0-rc.23
1.0.0-rc.22
1.0.0-rc.21
1.0.0-rc.20
1.0.0-rc.19
1.0.0-rc.18
1.0.0-rc.17
1.0.0-rc.2
0.6.3
0.6.2
0.6.1
0.6.0
0.5.5
0.5.4
0.5.3
0.5.1
0.5.0
0.5.0-rc.13
0.5.0-rc.12
0.5.0-rc.11
0.5.0-rc.10
0.5.0-rc.9
0.5.0-rc.8
0.5.0-rc.7
0.5.0-rc.6
0.5.0-rc.5
0.5.0-rc.3
0.5.0-alpha.13
0.5.0-alpha.12
0.5.0-alpha.11
0.5.0-alpha.10
0.5.0-alpha.9
0.5.0-alpha.8
0.5.0-alpha.7
0.5.0-alpha.6
0.5.0-alpha.5
0.5.0-alpha.4
0.5.0-alpha.3
0.5.0-alpha.2
0.5.0-alpha.1
0.1.0
Spawn Elixir SDK is the support library for the Spawn Actors System
Current section
Files
Jump to
Current section
Files
lib/value.ex
defmodule SpawnSdk.Value do
@moduledoc """
`Value` is a declarative DSL that provides the Domain Driven aspect of the Spawn technology.
It is through a Value that the user can configure the proxy to carry out
the infrastructure tasks and from which it provides all the Worflows.
"""
alias SpawnSdk.Flow.{Broadcast, Pipe, Forward, SideEffect}
defstruct state: nil,
value: nil,
broadcast: nil,
pipe: nil,
forward: nil,
effects: nil,
tags: nil
@type t :: %__MODULE__{
state: term(),
value: term(),
tags: map(),
broadcast: Broadcast.t(),
pipe: Pipe.t(),
forward: Forward.t(),
effects: list(SideEffect.t())
}
@type value :: __MODULE__.t()
@type broadcast :: Broadcast.t()
@type effects :: list(SideEffect.t())
@type pipe :: Pipe.t()
@type forward :: Forward.t()
@type response :: term()
@type new_state :: term()
@type tags :: map()
@spec of() :: value()
def of(), do: %SpawnSdk.Value{}
@spec of(response(), new_state()) :: value()
def of(response, new_state) do
struct(%SpawnSdk.Value{}, value: response, state: new_state)
end
@spec of(value(), response(), new_state()) :: value()
def of(%SpawnSdk.Value{} = value, response, new_state) do
struct(value, value: response, state: new_state)
end
@spec state(value(), new_state()) :: value()
def state(%SpawnSdk.Value{} = value, new_state) do
struct(value, state: new_state)
end
@spec value(value(), response()) :: value()
def value(%SpawnSdk.Value{} = value, response) do
struct(value, value: response)
end
@spec response(value(), response()) :: value()
def response(%SpawnSdk.Value{} = value, response) do
struct(value, value: response)
end
@spec broadcast(value(), broadcast()) :: value()
def broadcast(%SpawnSdk.Value{} = value, broadcast) do
struct(value, broadcast: broadcast)
end
@spec effect(value(), effects()) :: value()
def effect(%SpawnSdk.Value{} = value, effect) do
struct(value, effects: [effect])
end
@spec effects(value(), effects()) :: value()
def effects(%SpawnSdk.Value{} = value, effects) do
struct(value, effects: effects)
end
@spec pipe(value(), pipe()) :: value()
def pipe(%SpawnSdk.Value{} = value, pipe) do
struct(value, pipe: pipe)
end
@spec forward(value(), forward()) :: value()
def forward(%SpawnSdk.Value{} = value, forward) do
struct(value, forward: forward)
end
@spec tags(value(), tags()) :: value()
def tags(%SpawnSdk.Value{} = value, tags) do
struct(value, tags: tags)
end
@spec reply!(value()) :: {:reply, value()}
def reply!(%SpawnSdk.Value{state: new_state} = _value)
when is_nil(new_state),
do: raise("Response New State are required!")
def reply!(%SpawnSdk.Value{} = value) do
{:reply, value}
end
@spec noreply!(value()) :: {:reply, value()}
def noreply!(%SpawnSdk.Value{state: new_state} = value, opts \\ []) do
force = Keyword.get(opts, :force, false)
if is_nil(new_state) and not force do
raise("Argumenterror. Response New State are required!")
end
{:reply, value}
end
@spec noreply_state!(new_state()) :: {:reply, value()}
def noreply_state!(state) do
%__MODULE__{}
|> state(state)
|> noreply!()
end
@spec void() :: {:reply, value()}
def void do
{:reply, %SpawnSdk.Value{}}
end
@spec void(value()) :: {:reply, value()}
def void(%SpawnSdk.Value{} = value) do
{:reply, value}
end
end