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