lib/bubble_match/entity.ex

defmodule BubbleMatch.Entity do
  use BubbleLib.DslStruct,
    kind: nil,
    provider: nil,
    value: nil,
    raw: nil,
    extra: %{}

  alias __MODULE__, as: M

  def new(provider, kind, value, raw, extra \\ %{}) do
    %M{provider: provider, kind: kind, value: value, raw: raw, extra: extra}
  end
end

defimpl String.Chars, for: BubbleMatch.Entity do
  def to_string(%BubbleMatch.Entity{value: value}) do
    Kernel.to_string(value)
  end
end

require BubbleLib.DslStruct
BubbleLib.DslStruct.jason_derive(BubbleMatch.Entity)