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

53 lines
1 KiB
Elixir
Raw Normal View History

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