defmodule Noizu.Weaviate.GraphQL.Explore do
defstruct [
near_text: nil,
near_vector: nil,
near_object: nil,
limit: nil,
offset: nil
]
def near_text(%Noizu.Weaviate.GraphQL.Explore{} = this, value) do
%{this | near_text: value}
end
def near_vector(%Noizu.Weaviate.GraphQL.Explore{} = this, value) do
%{this | near_vector: value}
end
def near_object(%Noizu.Weaviate.GraphQL.Explore{} = this, value) do
%{this | near_object: value}
end
def limit(%Noizu.Weaviate.GraphQL.Explore{} = this, value) do
%{this | limit: value}
end
def offset(%Noizu.Weaviate.GraphQL.Explore{} = this, value) do
%{this | offset: value}
end
defimpl Jason.Encoder do
defp nest(string, prefix) do
prepared = String.trim(string)
|> String.split("\n")
|> Enum.join("\n#{prefix}")
prepared
end
def encode(this, _opts) do
class_attributes =
[]
|> then(& this.near_text && [Jason.encode!(this.near_text) | &1] || &1)
|> then(& this.near_vector && [Jason.encode!(this.near_vector) | &1] || &1)
|> then(& this.near_object && [Jason.encode!(this.near_object) | &1] || &1)
|> then(& this.limit && [{:limit, this.limit} | &1] || &1)
|> then(& this.offset && [{:offset, this.offset} | &1] || &1)
|> Enum.map(fn
({k, v}) -> "#{k}: #{inspect v}"
(k) -> k
end)
|> Enum.join(",\n")
|> case do
"" -> nil
v -> v
end
query = if class_attributes do
"""
{
Explore (
#{nest(class_attributes, " ")}
) {
beacon
certainty
distance
className
}
}
"""
else
"""
{
Explore {
beacon
certainty
distance
className
}
}
"""
end |> String.trim()
"""
{\"query\": #{inspect(query)}}
""" |> String.trim()
end
end
end