lib/connection/models/topology.ex
defmodule Ravix.Connection.Topology do
@moduledoc """
Represents the RavenDB topology
- etag: Topology etag
- nodes: List of ServerNodes for this topology
"""
defstruct etag: 0,
nodes: []
alias Ravix.Connection.Topology
alias Ravix.Connection.ServerNode
@type t :: %Topology{
etag: integer(),
nodes: list(ServerNode.t())
}
@doc """
Fetches the cluster_tag for the informed node
"""
@spec cluster_tag_for_node(Topology.t(), String.t()) :: String.t() | nil
def cluster_tag_for_node(%Topology{} = topology, url) do
case topology.nodes |> Enum.find(fn node -> node.url == url end) do
nil -> nil
node -> node.cluster_tag
end
end
end