-
Notifications
You must be signed in to change notification settings - Fork 26
/
action.ex
110 lines (91 loc) · 3.02 KB
/
action.ex
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
defmodule Snap.Bulk.Action.Create do
@moduledoc """
Represents a create step in a `Snap.Bulk` operation
"""
@enforce_keys [:doc]
defstruct [:_index, :_id, :require_alias, :doc]
@type t :: %__MODULE__{
_index: String.t() | nil,
_id: String.t() | nil,
require_alias: boolean() | nil,
doc: map()
}
end
defmodule Snap.Bulk.Action.Delete do
@moduledoc """
Represents a delete step in a `Snap.Bulk` operation
"""
@enforce_keys [:_id]
defstruct [:_index, :_id, :require_alias]
@type t :: %__MODULE__{
_index: String.t() | nil,
_id: String.t(),
require_alias: boolean() | nil
}
end
defmodule Snap.Bulk.Action.Index do
@moduledoc """
Represents an index step in a `Snap.Bulk` operation
"""
@enforce_keys [:doc]
defstruct [:_index, :_id, :require_alias, :doc]
@type t :: %__MODULE__{
_index: String.t() | nil,
_id: String.t() | nil,
require_alias: boolean() | nil,
doc: map()
}
end
defmodule Snap.Bulk.Action.Update do
@moduledoc """
Represents an update step in a `Snap.Bulk` operation
"""
@enforce_keys [:doc]
defstruct [:_index, :_id, :require_alias, :doc]
@type t :: %__MODULE__{
_index: String.t() | nil,
_id: String.t() | nil,
require_alias: boolean() | nil,
doc: map()
}
end
defimpl Jason.Encoder, for: Snap.Bulk.Action.Create do
require Jason.Helpers
def encode(%Snap.Bulk.Action.Create{_index: index, _id: id, require_alias: require_alias}, opts) do
values = [_index: index, _id: id, require_alias: require_alias]
values
|> Enum.reject(&is_nil(elem(&1, 1)))
|> then(fn values -> %{"create" => Jason.OrderedObject.new(values)} end)
|> Jason.Encode.map(opts)
end
end
defimpl Jason.Encoder, for: Snap.Bulk.Action.Delete do
require Jason.Helpers
def encode(%Snap.Bulk.Action.Delete{_index: index, _id: id, require_alias: require_alias}, opts) do
values = [_index: index, _id: id, require_alias: require_alias]
values
|> Enum.reject(&is_nil(elem(&1, 1)))
|> then(fn values -> %{"delete" => Jason.OrderedObject.new(values)} end)
|> Jason.Encode.map(opts)
end
end
defimpl Jason.Encoder, for: Snap.Bulk.Action.Update do
require Jason.Helpers
def encode(%Snap.Bulk.Action.Update{_index: index, _id: id, require_alias: require_alias}, opts) do
values = [_index: index, _id: id, require_alias: require_alias]
values
|> Enum.reject(&is_nil(elem(&1, 1)))
|> then(fn values -> %{"update" => Jason.OrderedObject.new(values)} end)
|> Jason.Encode.map(opts)
end
end
defimpl Jason.Encoder, for: Snap.Bulk.Action.Index do
require Jason.Helpers
def encode(%Snap.Bulk.Action.Index{_index: index, _id: id, require_alias: require_alias}, opts) do
values = [_index: index, _id: id, require_alias: require_alias]
values
|> Enum.reject(&is_nil(elem(&1, 1)))
|> then(fn values -> %{"index" => Jason.OrderedObject.new(values)} end)
|> Jason.Encode.map(opts)
end
end