Current section

Files

Jump to
membrane_core lib membrane element.ex
Raw

lib/membrane/element.ex

defmodule Membrane.Element do
@moduledoc """
Module containing types and functions for operating on elements.
For behaviours for elements chceck `Membrane.Source`, `Membrane.Filter` and
`Membrane.Sink`.
"""
@typedoc """
Defines options that can be received in `c:Membrane.Element.Base.handle_init/1`
callback.
"""
@type options_t :: struct | nil
@typedoc """
Type that defines an element name by which it is identified.
"""
@type name_t :: atom | {atom, non_neg_integer}
@typedoc """
Defines possible element types:
- source, producing buffers
- filter, processing buffers
- sink, consuming buffers
"""
@type type_t :: :source | :filter | :sink
@typedoc """
Type of user-managed state of element.
"""
@type state_t :: map | struct
@doc """
Checks whether the given term is a valid element name
"""
defguard is_element_name(term)
when is_atom(term) or
(is_tuple(term) and tuple_size(term) == 2 and is_atom(elem(term, 0)) and
is_integer(elem(term, 1)) and elem(term, 1) >= 0)
@doc """
Checks whether module is an element.
"""
@spec element?(module) :: boolean
def element?(module) do
module |> Bunch.Module.check_behaviour(:membrane_element?)
end
end