Packages
spawn_sdk
0.5.0-alpha.2
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/flow.ex
defmodule SpawnSdk.Flow do
defmodule Broadcast do
defstruct channel: nil, command: nil, payload: nil
@type t :: %__MODULE__{
channel: String.t(),
command: String.t() | atom(),
payload: module()
}
@type channel :: String.t()
@type command :: String.t() | atom()
@type payload :: module() | nil
@spec to(channel(), command(), payload()) :: Broadcast.t()
def to(channel, command, payload \\ nil) do
command_name = if is_atom(command), do: Atom.to_string(command), else: command
%__MODULE__{
channel: channel,
command: command_name,
payload: payload
}
end
end
defmodule Pipe do
defstruct actor_name: nil, command: nil
@type t :: %__MODULE__{
actor_name: String.t(),
command: String.t() | atom()
}
@type actor_name :: String.t()
@type command :: String.t() | atom()
@spec to(actor_name(), command()) :: Pipe.t()
def to(actor_name, command) do
command_name = if is_atom(command), do: Atom.to_string(command), else: command
%__MODULE__{
actor_name: actor_name,
command: command_name
}
end
end
defmodule Forward do
defstruct actor_name: nil, command: nil
@type t :: %__MODULE__{
actor_name: String.t(),
command: String.t() | atom()
}
@type actor_name :: String.t()
@type command :: String.t() | atom()
@spec to(actor_name(), command()) :: Forward.t()
def to(actor_name, command) do
command_name = if is_atom(command), do: Atom.to_string(command), else: command
%__MODULE__{
actor_name: actor_name,
command: command_name
}
end
end
defmodule SideEffect do
defstruct actor_name: nil, command: nil, payload: nil
@type t :: %__MODULE__{
actor_name: String.t(),
command: String.t() | atom(),
payload: module()
}
@type actor_name :: String.t()
@type command :: String.t() | atom()
@type payload :: module()
@spec of() :: list(SideEffect.t())
def of(), do: []
@spec effect(list(), actor_name(), command(), payload()) :: list(SideEffect.t())
def effect(list, actor_name, command, payload) do
effect = to(actor_name, command, payload)
list ++ [effect]
end
@spec to(actor_name(), command(), payload()) :: SideEffect.t()
def to(actor_name, command, payload) do
command_name = if is_atom(command), do: Atom.to_string(command), else: command
%__MODULE__{
actor_name: actor_name,
command: command_name,
payload: payload
}
end
end
end