defmodule Membrane.Payload.Shm do @moduledoc """ Wrapper over `Shmex` module, implementing `Membrane.Payload.Behaviour` """ @behaviour Membrane.Payload.Behaviour @type t :: Shmex.t() @impl true defdelegate empty(), to: Shmex @impl true defdelegate new(data), to: Shmex end defimpl Membrane.Payload, for: Shmex do @impl true def size(%Shmex{size: size}) do size end @impl true def split_at(%Shmex{size: size} = shm, at_pos) when 0 < at_pos and at_pos < size do {:ok, payloads} = Shmex.Native.split_at(shm, at_pos) payloads end @impl true def concat(left, right) do {:ok, res} = Shmex.Native.append(left, right) res end @impl true def drop(payload, n) do {:ok, new_payload} = Shmex.Native.trim(payload, n) new_payload end @impl true defdelegate to_binary(payload), to: Shmex @impl true def module(_), do: Membrane.Payload.Shm end