# codegen: do not edit
defmodule GenLSP.Structures.ColorPresentation do
  import Schematic, warn: false

  use TypedStruct

  @doc """
  ## Fields

  * label: The label of this color presentation. It will be shown on the color
    picker header. By default this is also the text that is inserted when selecting
    this color presentation.
  * text_edit: An {@link TextEdit edit} which is applied to a document when selecting
    this presentation for the color.  When `falsy` the {@link ColorPresentation.label label}
    is used.
  * additional_text_edits: An optional array of additional {@link TextEdit text edits} that are applied when
    selecting this color presentation. Edits must not overlap with the main {@link ColorPresentation.textEdit edit} nor with themselves.
  """
  @derive Jason.Encoder
  typedstruct do
    field :label, String.t(), enforce: true
    field :text_edit, GenLSP.Structures.TextEdit.t()
    field :additional_text_edits, list(GenLSP.Structures.TextEdit.t())
  end

  @doc false
  @spec schema() :: Schematic.t()
  def schema() do
    schema(__MODULE__, %{
      {"label", :label} => str(),
      optional({"textEdit", :text_edit}) => GenLSP.Structures.TextEdit.schema(),
      optional({"additionalTextEdits", :additional_text_edits}) =>
        list(GenLSP.Structures.TextEdit.schema())
    })
  end
end
