lib/weaviate_structs/schema.ex


defmodule Noizu.Weaviate.Struct.Schema do
  @moduledoc """
  Struct for representing a property in Weaviate schema.
  """

  defstruct [
    :classes,
  ]

  @type t :: %__MODULE__{
          classes: list(Noizu.Weaviate.Struct.Class.t)
        }

  def from_json(json) when is_list(json) do
    Enum.map(json, & from_json(&1))
  end
  def from_json(nil), do: nil
  def from_json(%{} = json) do
    %__MODULE__{
      classes: Noizu.Weaviate.Struct.Class.from_json(json[:classes])
    }
  end


  defimpl Jason.Encoder do
    def encode(this, opts) do
      %{
        classes: this.classes
      }
      |> Enum.reject(fn {k,v} -> is_nil(v) end)
      |> Map.new()
      |> Jason.Encode.map(opts)
    end
  end
end