defmodule Xandra.SchemaChange do
@moduledoc """
A struct that represents the result of a query that modifies the schema.
See [`%Xandra.SchemaChange{}`](`__struct__/0`) for information on the fields of this struct.
"""
@doc """
The struct for the "schema change" result.
This struct has the following fields:
* `:effect` - the type of change involved. It's one of `"CREATED"`,
`"UPDATED"`, or `"DROPPED"`.
* `:target` - what has been modified. It's one of `"KEYSPACE"`, `"TABLE"`,
or `"TYPE"`.
* `:options` - a map of options that depends on the value of `:target`:
* if target is `"KEYSPACE"`, the map will have the form
`%{keyspace: keyspace}`
* if the target is `"TABLE"` or `"TYPE"`, the map will have the form
`%{keyspace: keyspace, subject: subject}` where `keyspace` is the
keyspace where the change happened and `subject` is the name of what
changed (so the name of the changed table or type)
* `:tracing_id` - the tracing ID (as a UUID binary) if tracing was enabled,
or `nil` if no tracing was enabled. See the "Tracing" section in `Xandra.execute/4`.
* `:custom_payload` - the *custom payload* sent by the server, if present.
If the server doesn't send a custom payload, this field is `nil`. Otherwise,
it's of type `t:Xandra.custom_payload/0`. See the "Custom payloads" section
in the documentation for the `Xandra` module.
"""
defstruct [:effect, :target, :options, :tracing_id, :custom_payload]
@typedoc """
The type for a schema change result.
See [`%Xandra.SchemaChange{}`](`__struct__/0`) for information.
"""
@type t :: %__MODULE__{
effect: String.t(),
target: String.t(),
options: map,
tracing_id: binary | nil,
custom_payload: Xandra.custom_payload() | nil
}
end