Skip to content

Commit

Permalink
privatised encoder functions for Hui.U struct (Hui.U.encode) that sho…
Browse files Browse the repository at this point in the history
…uldn’t be public
  • Loading branch information
boonious committed Oct 8, 2018
1 parent b08a979 commit cb9ad3b
Showing 1 changed file with 33 additions and 32 deletions.
65 changes: 33 additions & 32 deletions lib/hui/u.ex
Original file line number Diff line number Diff line change
Expand Up @@ -16,49 +16,50 @@ defmodule Hui.U do
delete_id: binary | list(binary), delete_query: binary | list(binary)}

def encode(%__MODULE__{} = s) do
a = "#{encode(doc: s.doc, within: s.commitWithin, overwrite: s.overwrite)}"
b = "#{encode(delete_id: s.delete_id)}"
c = "#{encode(delete_query: s.delete_query)}"
d = "#{encode(commit: s.commit, wait: s.waitSearcher, expunge: s.expungeDeletes)}"
e = "#{encode(optimize: s.optimize, wait: s.waitSearcher, max: s.maxSegments)}"
f = "#{encode(rollback: s.rollback)}"
a = "#{_encode(doc: s.doc, within: s.commitWithin, overwrite: s.overwrite)}"
b = "#{_encode(delete_id: s.delete_id)}"
c = "#{_encode(delete_query: s.delete_query)}"
d = "#{_encode(commit: s.commit, wait: s.waitSearcher, expunge: s.expungeDeletes)}"
e = "#{_encode(optimize: s.optimize, wait: s.waitSearcher, max: s.maxSegments)}"
f = "#{_encode(rollback: s.rollback)}"

x = [a, b, c, d, e, f] |> Enum.filter(fn x -> x != "" end)
"{#{Enum.join(x, ",")}}"
end
def encode(doc) when is_map(doc), do: Poison.encode!(doc)

def encode(doc: doc, within: w, overwrite: o) when is_map(doc), do: "\"add\":{#{encode(within: w)}#{encode(overwrite: o)}\"doc\":#{encode(doc)}}"
def encode(doc: [h|t], within: w, overwrite: o) when is_map(h), do: Enum.map_join([h]++t, "," , &encode(doc: &1, within: w, overwrite: o))
def encode(doc: _, within: _, overwrite: _), do: ""
defp _encode(doc) when is_map(doc), do: Poison.encode!(doc)

def encode(within: w) when is_integer(w), do: "\"commitWithin\":#{w},"
def encode(within: _), do: ""
defp _encode(doc: doc, within: w, overwrite: o) when is_map(doc), do: "\"add\":{#{_encode(within: w)}#{_encode(overwrite: o)}\"doc\":#{_encode(doc)}}"
defp _encode(doc: [h|t], within: w, overwrite: o) when is_map(h), do: Enum.map_join([h]++t, "," , &_encode(doc: &1, within: w, overwrite: o))
defp _encode(doc: _, within: _, overwrite: _), do: ""

def encode(overwrite: o) when is_boolean(o), do: "\"overwrite\":#{o},"
def encode(overwrite: _), do: ""
defp _encode(within: w) when is_integer(w), do: "\"commitWithin\":#{w},"
defp _encode(within: _), do: ""

def encode(commit: true, wait: w, expunge: e) when is_boolean(w) and is_boolean(e), do: "\"commit\":{\"waitSearcher\":#{w},\"expungeDeletes\":#{e}}"
def encode(commit: true, wait: w, expunge: nil) when is_boolean(w), do: "\"commit\":{\"waitSearcher\":#{w}}"
def encode(commit: true, wait: nil, expunge: e) when is_boolean(e), do: "\"commit\":{\"expungeDeletes\":#{e}}"
def encode(commit: true, wait: nil, expunge: nil), do: "\"commit\":{}"
def encode(commit: _, wait: _, expunge: _), do: ""
defp _encode(overwrite: o) when is_boolean(o), do: "\"overwrite\":#{o},"
defp _encode(overwrite: _), do: ""

def encode(optimize: true, wait: w, max: m) when is_boolean(w) and is_integer(m), do: "\"optimize\":{\"waitSearcher\":#{w},\"maxSegments\":#{m}}"
def encode(optimize: true, wait: w, max: nil) when is_boolean(w), do: "\"optimize\":{\"waitSearcher\":#{w}}"
def encode(optimize: true, wait: nil, max: m) when is_integer(m), do: "\"optimize\":{\"maxSegments\":#{m}}"
def encode(optimize: true, wait: nil, max: nil), do: "\"optimize\":{}"
def encode(optimize: _, wait: _, max: _), do: ""
defp _encode(commit: true, wait: w, expunge: e) when is_boolean(w) and is_boolean(e), do: "\"commit\":{\"waitSearcher\":#{w},\"expungeDeletes\":#{e}}"
defp _encode(commit: true, wait: w, expunge: nil) when is_boolean(w), do: "\"commit\":{\"waitSearcher\":#{w}}"
defp _encode(commit: true, wait: nil, expunge: e) when is_boolean(e), do: "\"commit\":{\"expungeDeletes\":#{e}}"
defp _encode(commit: true, wait: nil, expunge: nil), do: "\"commit\":{}"
defp _encode(commit: _, wait: _, expunge: _), do: ""

def encode(delete_id: id) when is_binary(id), do: "\"delete\":{\"id\":\"#{id}\"}"
def encode(delete_id: id) when is_list(id), do: Enum.map_join(id, ",", &encode(delete_id: &1))
def encode(delete_id: _), do: ""
defp _encode(optimize: true, wait: w, max: m) when is_boolean(w) and is_integer(m), do: "\"optimize\":{\"waitSearcher\":#{w},\"maxSegments\":#{m}}"
defp _encode(optimize: true, wait: w, max: nil) when is_boolean(w), do: "\"optimize\":{\"waitSearcher\":#{w}}"
defp _encode(optimize: true, wait: nil, max: m) when is_integer(m), do: "\"optimize\":{\"maxSegments\":#{m}}"
defp _encode(optimize: true, wait: nil, max: nil), do: "\"optimize\":{}"
defp _encode(optimize: _, wait: _, max: _), do: ""

def encode(delete_query: q) when is_binary(q), do: "\"delete\":{\"query\":\"#{q}\"}"
def encode(delete_query: q) when is_list(q), do: Enum.map_join(q, ",", &encode(delete_query: &1))
def encode(delete_query: _), do: ""
defp _encode(delete_id: id) when is_binary(id), do: "\"delete\":{\"id\":\"#{id}\"}"
defp _encode(delete_id: id) when is_list(id), do: Enum.map_join(id, ",", &_encode(delete_id: &1))
defp _encode(delete_id: _), do: ""

def encode(rollback: true), do: "\"rollback\":{}"
def encode(rollback: _), do: ""
defp _encode(delete_query: q) when is_binary(q), do: "\"delete\":{\"query\":\"#{q}\"}"
defp _encode(delete_query: q) when is_list(q), do: Enum.map_join(q, ",", &_encode(delete_query: &1))
defp _encode(delete_query: _), do: ""

defp _encode(rollback: true), do: "\"rollback\":{}"
defp _encode(rollback: _), do: ""

end

0 comments on commit cb9ad3b

Please sign in to comment.