Merge branch 'develop' into 'remove-twitter-api'
[akkoma] / lib / pleroma / web / activity_pub / object_validators / types / recipients.ex
1 defmodule Pleroma.Web.ActivityPub.ObjectValidators.Types.Recipients do
2 use Ecto.Type
3
4 alias Pleroma.Web.ActivityPub.ObjectValidators.Types.ObjectID
5
6 def type, do: {:array, ObjectID}
7
8 def cast(object) when is_binary(object) do
9 cast([object])
10 end
11
12 def cast(data) when is_list(data) do
13 data
14 |> Enum.reduce({:ok, []}, fn element, acc ->
15 case {acc, ObjectID.cast(element)} do
16 {:error, _} -> :error
17 {_, :error} -> :error
18 {{:ok, list}, {:ok, id}} -> {:ok, [id | list]}
19 end
20 end)
21 end
22
23 def cast(_) do
24 :error
25 end
26
27 def dump(data) do
28 {:ok, data}
29 end
30
31 def load(data) do
32 {:ok, data}
33 end
34 end