af4b0e52779524291822a94ec552d97e020e0a88
[akkoma] / lib / pleroma / ecto_type / activity_pub / object_validators / recipients.ex
1 # Pleroma: A lightweight social networking server
2 # Copyright © 2017-2021 Pleroma Authors <https://pleroma.social/>
3 # SPDX-License-Identifier: AGPL-3.0-only
4
5 defmodule Pleroma.EctoType.ActivityPub.ObjectValidators.Recipients do
6 use Ecto.Type
7
8 alias Pleroma.EctoType.ActivityPub.ObjectValidators.ObjectID
9
10 def type, do: {:array, ObjectID}
11
12 def cast(object) when is_binary(object) do
13 cast([object])
14 end
15
16 def cast(data) when is_list(data) do
17 data
18 |> Enum.reduce_while({:ok, []}, fn element, {:ok, list} ->
19 case ObjectID.cast(element) do
20 {:ok, id} ->
21 {:cont, {:ok, [id | list]}}
22
23 _ ->
24 {:halt, :error}
25 end
26 end)
27 end
28
29 def cast(_) do
30 :error
31 end
32
33 def dump(data) do
34 {:ok, data}
35 end
36
37 def load(data) do
38 {:ok, data}
39 end
40 end