lib/line_drive/note.ex

defmodule LineDrive.Note do
  @moduledoc """
  This module and enclosed structs represent a note in pipedrive.
  """

  use TypedStruct
  use LineDrive.Structable

  typedstruct do
    field :content, String.t(), enforce: true
    field :id, String.t()
    field :org_id, pos_integer()
    field :person_id, pos_integer()
    field :deal_id, pos_integer()
    field :lead_id, pos_integer()
    field :pinned_to_organization_flag, boolean(), default: false
  end

  defimpl Jason.Encoder, for: __MODULE__ do
    def encode(%{} = note, opts) do
      Jason.Encode.value(
        Map.take(Map.from_struct(note), [
          :content,
          :org_id,
          :person_id,
          :deal_id,
          :lead_id,
          :pinned_to_organization_flag
        ]),
        opts
      )
    end

    def encode(note, opts), do: Jason.encode(note, opts)
  end
end