# codegen: do not edit
defmodule GenLSP.Structures.ChangeAnnotation do
  @moduledoc """
  Additional information that describes document changes.

  @since 3.16.0
  """

  import Schematic, warn: false

  use TypedStruct

  @doc """
  ## Fields

  * label: A human-readable string describing the actual change. The string
    is rendered prominent in the user interface.
  * needs_confirmation: A flag which indicates that user confirmation is needed
    before applying the change.
  * description: A human-readable string which is rendered less prominent in
    the user interface.
  """
  @derive Jason.Encoder
  typedstruct do
    field :label, String.t(), enforce: true
    field :needs_confirmation, boolean()
    field :description, String.t()
  end

  @doc false
  @spec schema() :: Schematic.t()
  def schema() do
    schema(__MODULE__, %{
      {"label", :label} => str(),
      optional({"needsConfirmation", :needs_confirmation}) => bool(),
      optional({"description", :description}) => str()
    })
  end
end
