# Pleroma: A lightweight social networking server # Copyright © 2017-2021 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.EctoType.ActivityPub.ObjectValidators.Recipients do use Ecto.Type alias Pleroma.EctoType.ActivityPub.ObjectValidators.ObjectID def type, do: {:array, ObjectID} def cast(object) when is_binary(object) do cast([object]) end def cast(object) when is_map(object) do case ObjectID.cast(object) do {:ok, data} -> {:ok, [data]} _ -> :error end end def cast(data) when is_list(data) do data = data |> Enum.reduce_while([], fn element, list -> case ObjectID.cast(element) do {:ok, id} -> {:cont, [id | list]} _ -> {:cont, list} end end) |> Enum.sort() |> Enum.uniq() {:ok, data} end def cast(data) do {:error, data} end def dump(data) do {:ok, data} end def load(data) do {:ok, data} end end