defmodule Slack.SectionBlock do defstruct [ :id, :text, :accessory, fields: [], elements: [] ] defimpl Jason.Encoder, for: __MODULE__ do def encode(value, opts) do %{ type: "section", block_id: value.id, text: %{ type: "mrkdwn", text: value.text }, accessory: value.accessory, fields: value.fields, elements: value.elements } |> Enum.reject(fn {_, v} -> is_nil(v) or v == [] end) |> Map.new() |> Jason.Encode.map(opts) end end end