pleroma/lib/pleroma/ecto_type/activity_pub/object_validators/recipients.ex

53 lines
1.0 KiB
Elixir
Raw Normal View History

# Pleroma: A lightweight social networking server
# Copyright © 2017-2023 Pleroma Authors <https://pleroma.social/>
# SPDX-License-Identifier: AGPL-3.0-only
defmodule Pleroma.EctoType.ActivityPub.ObjectValidators.Recipients do
2020-04-08 15:55:43 +02:00
use Ecto.Type
alias Pleroma.EctoType.ActivityPub.ObjectValidators.ObjectID
def type, do: {:array, ObjectID}
2020-04-08 15:55:43 +02:00
def cast(object) when is_binary(object) do
cast([object])
end
2020-09-10 11:11:10 +02:00
def cast(object) when is_map(object) do
case ObjectID.cast(object) do
{:ok, data} -> {:ok, [data]}
2020-09-10 11:11:10 +02:00
_ -> :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
2020-04-08 15:55:43 +02:00
def cast(data) do
{:error, data}
2020-04-08 15:55:43 +02:00
end
def dump(data) do
{:ok, data}
end
def load(data) do
{:ok, data}
end
end