Packages
membrane_core
1.2.3
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/core/inspect.ex
defmodule Membrane.Core.Inspect do
@moduledoc false
alias Inspect.Algebra
alias Membrane.Core.Component
@doc """
A function, that inspects passed state sorting its fields withing the order in which
they occur in the list passed to `defstruct`.
"""
@spec inspect(Component.state(), Inspect.Opts.t()) :: Inspect.Algebra.t()
def inspect(%state_module{} = state, opts) do
ordered_fields =
state_module.__info__(:struct)
|> Enum.map(& &1.field)
field_to_doc_fun =
fn field, opts ->
value_doc =
Map.fetch!(state, field)
|> Algebra.to_doc(opts)
Algebra.concat("#{Atom.to_string(field)}: ", value_doc)
end
Algebra.container_doc(
"%#{Kernel.inspect(state_module)}{",
ordered_fields,
"}",
opts,
field_to_doc_fun,
break: :strict
)
end
end
[Pipeline, Bin, Element]
|> Enum.map(fn component ->
state_module = Module.concat([Membrane.Core, component, State])
defimpl Inspect, for: state_module do
@spec inspect(unquote(state_module).t(), Inspect.Opts.t()) :: Inspect.Algebra.t()
defdelegate inspect(state, opts), to: Membrane.Core.Inspect
end
end)