Packages
membrane_core
0.8.0
1.3.4
1.3.3
1.3.2
1.3.1
1.3.0
1.2.7
1.2.6
1.2.5
retired
1.2.4
1.2.3
1.2.2
1.2.1
1.2.0
1.2.0-rc1
1.1.2
1.1.1
1.1.0
1.1.0-rc1
1.1.0-rc0
1.0.1
1.0.0
1.0.0-rc1
1.0.0-rc0
0.12.9
0.12.8
0.12.7
0.12.6
0.12.5
0.12.4
0.12.3
0.12.2
0.12.1
0.12.0
retired
0.11.5
0.11.4
0.11.3
0.11.2
0.11.1
0.11.0
0.10.2
0.10.1
0.10.0
0.9.0
0.8.2
0.8.1
0.8.0
0.7.0
0.6.1
0.6.0
0.5.3
0.5.2
0.5.1
0.5.0
0.4.3
0.4.2
0.4.1
0.4.0
0.3.2
0.3.1
0.3.0
0.2.2
0.2.1
0.2.0
0.1.1
0.1.0
Membrane Multimedia Framework (Core)
Current section
Files
Jump to
Current section
Files
lib/membrane/component_path.ex
defmodule Membrane.ComponentPath do
@moduledoc """
Traces element's path inside a pipeline.
Path is a list consisted of following pipeline/bin/element names down the assembled pipeline.
Information is being stored in a process dictionary and can be set/appended to.
"""
@type path_t :: list(String.t())
@key :membrane_path
@doc """
Appends given name to the current path.
If path has not been previously set then creates new one with given name.
"""
@spec append(String.t()) :: :ok
def append(name) do
path = Process.get(@key, [])
Process.put(@key, path ++ [name])
:ok
end
@doc """
Sets current path.
If path had already existed then replaces it.
"""
@spec set(path_t) :: :ok
def set(path) do
Process.put(@key, path)
:ok
end
@doc """
Convenient combination of `set/1` and `append/1`.
"""
@spec set_and_append(path_t(), String.t()) :: :ok
def set_and_append(path, name) do
:ok = set(path)
append(name)
end
@doc """
Returns formatted string of given path's names joined with separator.
"""
@spec format(path_t(), String.t()) :: String.t()
def format(path, separator \\ "/") do
path |> Enum.join(separator)
end
@doc """
Works the same as `format/2` but uses currently stored path
"""
@spec get_formatted(String.t()) :: String.t()
def get_formatted(separator \\ "/") do
Process.get(@key, []) |> format(separator)
end
@doc """
Returns currently stored path.
If path has not been set, empty list is returned.
"""
@spec get() :: list(String.t())
def get(), do: Process.get(@key, [])
end