Packages
gleam_erlang
1.0.0-rc1
1.3.0
1.2.0
1.1.0
1.0.0
1.0.0-rc1
0.34.0
0.33.0
0.32.0
0.31.0
0.30.0
0.29.0
0.28.0
0.27.0
0.26.0
0.25.0
0.24.0
0.23.1
0.23.0
0.22.0
0.21.0
0.20.0
0.19.0
0.18.1
0.18.0
0.18.0-rc1
retired
0.17.1
0.17.0
0.16.0
0.15.0
0.14.0
0.13.0
0.12.0
0.11.0
0.10.0
0.9.3
0.9.2
0.9.1
0.9.0
0.8.0
0.7.0
0.6.0
0.5.0
0.4.0
0.3.0
0.2.0
0.1.0
Types and functions for programs running on Erlang!
Current section
Files
Jump to
Current section
Files
src/gleam/erlang/node.gleam
//// Multiple Erlang VM instances can form a cluster to make a distributed
//// Erlang system, talking directly to each other using messages rather than
//// other communication protocols like HTTP. In a distributed Erlang system
//// each virtual machine is called a _node_. This module provides Node related
//// types and functions to be used as a foundation by other packages providing
//// more specialised functionality.
////
//// For more information on distributed Erlang systems see the Erlang
//// documentation: <https://www.erlang.org/doc/system/distributed.html>.
import gleam/erlang/atom.{type Atom}
pub type Node
/// Return the current node.
///
@external(erlang, "erlang", "node")
pub fn self() -> Node
/// Return a list of all visible nodes in the cluster, not including the current
/// node.
///
/// The current node can be included by calling `self()` and prepending the
/// result.
///
/// ```gleam
/// let all_nodes = [node.self(), ..node.visible()]
/// ```
///
@external(erlang, "erlang", "nodes")
pub fn visible() -> List(Node)
pub type ConnectError {
/// Was unable to connect to the node.
FailedToConnect
/// The local node is not alive, so it is not possible to connect to the other
/// node.
LocalNodeIsNotAlive
}
// TODO: test unknown node
// TODO: test successfully connecting
/// Establish a connection to a node, so the nodes can send messages to each
/// other and any other connected nodes.
///
/// Returns `Error(FailedToConnect)` if the node is not reachable.
///
/// Returns `Error(LocalNodeIsNotAlive)` if the local node is not alive, meaning
/// it is not running in distributed mode.
///
@external(erlang, "gleam_erlang_ffi", "connect_node")
pub fn connect(node: Atom) -> Result(Node, ConnectError)