lib/membrane/buffer/metric.ex

defmodule Membrane.Buffer.Metric do
  @moduledoc """
  Specifies API for metrics that analyze data in terms of a given unit
  """

  alias Membrane.Buffer
  alias __MODULE__

  @type unit :: :buffers | :bytes

  @callback buffer_size_approximation() :: pos_integer

  @callback buffers_size([%Buffer{}] | []) :: non_neg_integer

  @callback split_buffers([%Buffer{}] | [], non_neg_integer) ::
              {[%Buffer{}] | [], [%Buffer{}] | []}

  @spec from_unit(unit()) :: module()
  def from_unit(:buffers), do: Metric.Count
  def from_unit(:bytes), do: Metric.ByteSize
end