lib/notion/query.ex

defmodule Notion.Query do
  @moduledoc """
  Query
  """

  alias Notion.{Filter, PropertyFilter, Sort}

  defstruct [:filter, :sorts, :start_cursor]

  @type t() :: %__MODULE__{
          filter: Filter.t() | PropertyFilter.t() | nil,
          sorts: [Sort.t()] | nil,
          start_cursor: String.t() | nil
        }
end

defimpl Jason.Encoder, for: Notion.Query do
  def encode(value, opts) do
    value
    |> Map.from_struct()
    |> Enum.reject(fn {_, v} -> is_nil(v) end)
    |> Enum.into(%{})
    |> Jason.Encode.map(opts)
  end
end