# codegen: do not edit
defmodule GenLSP.Structures.PrivateInitializeParams do
  @moduledoc """
  The initialize parameters

  import Schematic, warn: false

  use TypedStruct

  @doc """
  ## Fields

  * process_id: The process Id of the parent process that started
    the server.

    Is `null` if the process has not been started by another process.
    If the parent process is not alive then the server should exit.
  * client_info: Information about the client

    @since 3.15.0
  * locale: The locale the client is currently showing the user interface
    in. This must not necessarily be the locale of the operating

    Uses IETF language tags as the value's syntax

    @since 3.16.0
  * root_path: The rootPath of the workspace. Is null
    if no folder is open.

    @deprecated in favour of rootUri.
  * root_uri: The rootUri of the workspace. Is null if no
    folder is open. If both `rootPath` and `rootUri` are set
    `rootUri` wins.

    @deprecated in favour of workspaceFolders.
  * capabilities: The capabilities provided by the client (editor or tool)
  * initialization_options: User provided initialization options.
  * trace: The initial trace setting. If omitted trace is disabled ('off').
  * work_done_token: An optional token that a server can use to report work done progress.
  @derive Jason.Encoder
  typedstruct do
    field :process_id, integer() | nil, enforce: true
    field :client_info, map()
    field :locale, String.t()
    field :root_path, String.t() | nil
    field :root_uri, GenLSP.BaseTypes.document_uri() | nil, enforce: true
    field :capabilities, GenLSP.Structures.ClientCapabilities.t(), enforce: true
    field :initialization_options, GenLSP.TypeAlias.LSPAny.t()
    field :trace, GenLSP.Enumerations.TraceValues.t()
    field :work_done_token, GenLSP.TypeAlias.ProgressToken.t()

  @doc false
  @spec schematic() :: Schematic.t()
  def schematic() do
    schema(__MODULE__, %{
      {"processId", :process_id} => oneof([int(), nil]),
      optional({"clientInfo", :client_info}) =>
          {"name", :name} => str(),
          optional({"version", :version}) => str()
      optional({"locale", :locale}) => str(),
      optional({"rootPath", :root_path}) => oneof([str(), nil]),
      {"rootUri", :root_uri} => oneof([str(), nil]),
      {"capabilities", :capabilities} => GenLSP.Structures.ClientCapabilities.schematic(),
      optional({"initializationOptions", :initialization_options}) =>
      optional({"trace", :trace}) => GenLSP.Enumerations.TraceValues.schematic(),
      optional({"workDoneToken", :work_done_token}) => GenLSP.TypeAlias.ProgressToken.schematic()