Merge remote-tracking branch 'origin/develop' into benchmark-finishing
[akkoma] / lib / pleroma / docs / generator.ex
1 defmodule Pleroma.Docs.Generator do
2 @callback process(keyword()) :: {:ok, String.t()}
3
4 @spec process(module(), keyword()) :: {:ok, String.t()}
5 def process(implementation, descriptions) do
6 implementation.process(descriptions)
7 end
8
9 @spec uploaders_list() :: [module()]
10 def uploaders_list do
11 {:ok, modules} = :application.get_key(:pleroma, :modules)
12
13 Enum.filter(modules, fn module ->
14 name_as_list = Module.split(module)
15
16 List.starts_with?(name_as_list, ["Pleroma", "Uploaders"]) and
17 List.last(name_as_list) != "Uploader"
18 end)
19 end
20
21 @spec filters_list() :: [module()]
22 def filters_list do
23 {:ok, modules} = :application.get_key(:pleroma, :modules)
24
25 Enum.filter(modules, fn module ->
26 name_as_list = Module.split(module)
27
28 List.starts_with?(name_as_list, ["Pleroma", "Upload", "Filter"])
29 end)
30 end
31
32 @spec mrf_list() :: [module()]
33 def mrf_list do
34 {:ok, modules} = :application.get_key(:pleroma, :modules)
35
36 Enum.filter(modules, fn module ->
37 name_as_list = Module.split(module)
38
39 List.starts_with?(name_as_list, ["Pleroma", "Web", "ActivityPub", "MRF"]) and
40 length(name_as_list) > 4
41 end)
42 end
43
44 @spec richmedia_parsers() :: [module()]
45 def richmedia_parsers do
46 {:ok, modules} = :application.get_key(:pleroma, :modules)
47
48 Enum.filter(modules, fn module ->
49 name_as_list = Module.split(module)
50
51 List.starts_with?(name_as_list, ["Pleroma", "Web", "RichMedia", "Parsers"]) and
52 length(name_as_list) == 5
53 end)
54 end
55 end
56
57 defimpl Jason.Encoder, for: Tuple do
58 def encode(tuple, opts) do
59 Jason.Encode.list(Tuple.to_list(tuple), opts)
60 end
61 end
62
63 defimpl Jason.Encoder, for: [Regex, Function] do
64 def encode(term, opts) do
65 Jason.Encode.string(inspect(term), opts)
66 end
67 end
68
69 defimpl String.Chars, for: Regex do
70 def to_string(term) do
71 inspect(term)
72 end
73 end