Packages
BinStruct is a library which provides you rich set of tools for parsing/encoding binaries
Current section
Files
Jump to
Current section
Files
lib/bin_struct/macro/dependencies_topology.ex
defmodule BinStruct.Macro.DependenciesTopology do
@moduledoc false
def find_dependencies_topology(nodes_with_dependencies) do
flat_tree = normalize_flatten(nodes_with_dependencies)
graph =
Graph.new()
|> Graph.add_edges(flat_tree)
case Graph.topsort(graph) do
false -> { :error, :topology_not_exists }
topology -> { :ok, topology }
end
end
defp normalize_flatten(nodes_with_dependencies) do
Enum.map(
nodes_with_dependencies,
fn { node, depend_on } ->
Enum.map(
depend_on,
fn dependency ->
{ dependency, node }
end
)
end
)
|> List.flatten()
|> Enum.dedup()
end
end