<!--
This file was generated by Spark. Do not edit it by hand.
-->
# GuardedStruct.AshResource

A Spark DSL extension that adds the GuardedStruct DSL to an Ash resource.

## Usage

    defmodule MyApp.User do
      use Ash.Resource,
        domain: MyApp.MyDomain,
        extensions: [GuardedStruct.AshResource]

      attributes do
        uuid_primary_key :id
        attribute :email, :string, allow_nil?: false, public?: true
      end

      # GuardedStruct DSL — the syntax of standalone `use GuardedStruct`, without
      # the `@derives` decorator (write `derives:` on the field).
      guardedstruct do
        field :email, :string,
          derives: "sanitize(trim, downcase) validate(string, not_empty, email_r)"

        field :nickname, :string,
          derives: "sanitize(strip_tags, trim) validate(string, max_len=20)"

        sub_field :preferences, :map do
          field :theme, :string, derives: "validate(enum=String[light::dark])"
        end
      end

      # Wire the change into Ash's changeset pipeline (Option A — manual).
      changes do
        change GuardedStruct.AshResource.Change
      end
    end

Now every `:create` and `:update` action runs the GuardedStruct pipeline
(sanitize → validate → derive → main_validator) before Ash hits the data
layer. Errors surface as standard `Ash.Changeset.add_error/2` errors.

## Two wiring modes

### Option A — manual (default)

Ship-and-forget: we provide `GuardedStruct.AshResource.Change`; you add
a one-line `changes do change ... end` block as shown above. Explicit and
inspectable — `Ash.Resource.Info.changes/1` will show the change.

### Option B — auto-wire

Set `auto_wire: true` on the section and the change is injected for you:

    guardedstruct auto_wire: true do
      field :email, :string, derives: "sanitize(trim) validate(email_r)"
    end

    # no `changes do ... end` block needed — the transformer added it

The same option can be a setter at the top of the block, the Spark form:

    guardedstruct do
      auto_wire true
      field :email, :string, derives: "sanitize(trim) validate(email_r)"
    end

`sub_field` and `conditional_field` take both forms as well:
`sub_field :profile, :map, authorized_fields: true do ... end`, or
`authorized_fields true` as the first line of its block.

Under the hood this calls `Ash.Resource.Builder.add_change/3` from a Spark
transformer that runs after our codegen. The result is identical to writing
the `changes do change ... end` block by hand — Ash's introspection sees
the change either way. `auto_wire` is `false` by default (no magic).

## What this extension does NOT do

* **It does not generate `defstruct`.** Ash already does that.
* **It does not generate `builder/2`.** Ash uses changesets.
* **It does not generate `Error` exception modules.** Ash has its own error
  classes (`Ash.Error.*`).

Instead, the extension adds a single function — `__guarded_change__/1` —
that takes a map of attrs and returns `{:ok, transformed_attrs}` or
`{:error, errors}`. The companion `GuardedStruct.AshResource.Change` module
wires it into the changeset; `GuardedStruct.AshResource.Info` provides
introspection.

## Why `__guarded_change__` (not `__guarded_validate__`)

Earlier drafts called the function `__guarded_validate__/1`. We renamed it
because the function does more than validate — sanitize ops transform
values (trim, downcase, slugify), `auto:` MFAs fill defaults, derives
cast types. "Change" matches Ash's own terminology and is honest about
the side-effect.

## Auto-map cascade

Every nested `sub_field` returns a plain map (not a struct) at every depth
when called through `__guarded_change__/1`. This is automatic and unique
to the Ash extension — standalone `use GuardedStruct` callers still get
structs from `builder/1`.

    MyResource.__guarded_change__(%{
      profile: %{address: %{geo: %{lat: 1.0, lng: 2.0}}}
    })
    # {:ok, %{profile: %{address: %{geo: %{lat: 1.0, lng: 2.0}}}}}
    #                              ^^^^ plain map, NOT a struct

This matches Ash's `:map` attribute type, so validated output drops
directly into `changeset.attributes` without conversion. Implementation
is a process-local flag — concurrency-safe (sibling processes don't see
it), re-entrancy-safe (saved+restored across nested calls), zero overhead
for standalone callers.

## Update actions — atomic-safe by default

`GuardedStruct.AshResource.Change` implements `atomic/3` and returns
`{:atomic, sanitized_map}` to Ash, so update / destroy actions stay
atomic without setting `require_atomic? false`. The pipeline
(sanitize / validate / derive / `auto:` MFAs / `Derive.Extension`)
runs in Elixir on the plain literal inputs, and the resulting UPDATE
is a single SQL statement.

The only case that falls back to imperative mode is when the caller
passes an `Ash.Expr` via `Ash.Changeset.atomic_update/3` — `atomic/3`
returns `{:not_atomic, reason}` since we can't sanitize a value we
won't see until the SQL evaluates.

## sub_field vs Ash relationships

`sub_field` inside an Ash resource creates an **embedded value type**, not
a related Ash resource. The generated submodule is a standalone
GuardedStruct (it has `defstruct`, `builder/1`, full GuardedStruct API)
but it is NOT an Ash resource (no actions, no changesets, no table). Use
`sub_field` for nested map shapes inside a single resource's attrs. For
separate tables and relationships, use Ash's own `relationships do
has_one :preferences, ... end`.

## Companion modules

* `GuardedStruct.AshResource.Change` — the `Ash.Resource.Change` module
  that bridges `__guarded_change__/1` into the changeset pipeline.
* `GuardedStruct.AshResource.Info` — runtime introspection for the
  `__guarded_*` namespace.

## Example: introspect a resource's guarded fields

    GuardedStruct.AshResource.Info.fields(MyApp.User)
    # => [:email, :nickname, :preferences]


## guardedstruct


### Nested DSLs
 * [field](#guardedstruct-field)
 * [virtual_field](#guardedstruct-virtual_field)
 * [dynamic_field](#guardedstruct-dynamic_field)
 * [sub_field](#guardedstruct-sub_field)
   * conditional_field
     * field
     * sub_field
       * field
   * sub_field
     * field
   * field
 * [conditional_field](#guardedstruct-conditional_field)
   * sub_field
     * conditional_field
       * field
       * sub_field
         * field
     * sub_field
       * field
     * field
   * conditional_field
     * field
     * sub_field
       * field
   * field





### Options

| Name | Type | Default | Docs |
|------|------|---------|------|
| [`enforce`](#guardedstruct-enforce){: #guardedstruct-enforce } | `boolean` | `false` |  |
| [`opaque`](#guardedstruct-opaque){: #guardedstruct-opaque } | `boolean` | `false` |  |
| [`module`](#guardedstruct-module){: #guardedstruct-module } | `any` |  |  |
| [`error`](#guardedstruct-error){: #guardedstruct-error } | `boolean` | `false` |  |
| [`authorized_fields`](#guardedstruct-authorized_fields){: #guardedstruct-authorized_fields } | `boolean` | `false` |  |
| [`main_validator`](#guardedstruct-main_validator){: #guardedstruct-main_validator } | `{atom, atom}` |  | A `{Module, :function}` called with the attributes once every field has passed its validator; it returns `{:ok, attrs}` or `{:error, errors}`. When it is not set, a `main_validator/1` defined in the module is called instead. |
| [`validate_derive`](#guardedstruct-validate_derive){: #guardedstruct-validate_derive } | `atom \| list(atom)` |  | A module, or a list of modules, whose `validate/3` serves the `validate(...)` ops the built-in ones and the derive extensions do not know. They are tried before the `:validate_derive` application config, which still serves the ops they do not handle. |
| [`sanitize_derive`](#guardedstruct-sanitize_derive){: #guardedstruct-sanitize_derive } | `atom \| list(atom)` |  | A module, or a list of modules, whose `sanitize/2` serves the `sanitize(...)` ops the built-in ones and the derive extensions do not know. They are tried before the `:sanitize_derive` application config, which still serves the ops they do not handle. |
| [`json`](#guardedstruct-json){: #guardedstruct-json } | `boolean` | `false` | When `true`, derives a JSON encoder. Uses `Jason.Encoder` if `:jason` is in the user's deps; otherwise falls back to the built-in `JSON.Encoder` on Elixir 1.18+. No-op if neither is available. |
| [`auto_wire`](#guardedstruct-auto_wire){: #guardedstruct-auto_wire } | `boolean` | `false` | Only effective inside the `GuardedStruct.AshResource` extension. When `true`, injects `GuardedStruct.AshResource.Change` into the resource's top-level `changes` section so every `:create` and `:update` action automatically runs the GuardedStruct pipeline. Equivalent to writing `changes do change GuardedStruct.AshResource.Change end` by hand. No-op outside the Ash extension. |



### guardedstruct.field
```elixir
field name, type
```








### Arguments

| Name | Type | Default | Docs |
|------|------|---------|------|
| [`name`](#guardedstruct-field-name){: #guardedstruct-field-name .spark-required} | `any` |  |  |
| [`type`](#guardedstruct-field-type){: #guardedstruct-field-type .spark-required} | `any` |  |  |
### Options

| Name | Type | Default | Docs |
|------|------|---------|------|
| [`enforce`](#guardedstruct-field-enforce){: #guardedstruct-field-enforce } | `boolean` |  |  |
| [`default`](#guardedstruct-field-default){: #guardedstruct-field-default } | `any` |  |  |
| [`derives`](#guardedstruct-field-derives){: #guardedstruct-field-derives } | `String.t` |  |  |
| [`derive`](#guardedstruct-field-derive){: #guardedstruct-field-derive } | `String.t` |  |  |
| [`validator`](#guardedstruct-field-validator){: #guardedstruct-field-validator } | `{atom, atom}` |  |  |
| [`auto`](#guardedstruct-field-auto){: #guardedstruct-field-auto } | `{atom, atom} \| {atom, atom, any}` |  |  |
| [`from`](#guardedstruct-field-from){: #guardedstruct-field-from } | `String.t` |  |  |
| [`on`](#guardedstruct-field-on){: #guardedstruct-field-on } | `String.t` |  |  |
| [`domain`](#guardedstruct-field-domain){: #guardedstruct-field-domain } | `String.t` |  |  |
| [`struct`](#guardedstruct-field-struct){: #guardedstruct-field-struct } | `atom` |  |  |
| [`structs`](#guardedstruct-field-structs){: #guardedstruct-field-structs } | `atom \| boolean` |  |  |
| [`hint`](#guardedstruct-field-hint){: #guardedstruct-field-hint } | `String.t` |  |  |
| [`priority`](#guardedstruct-field-priority){: #guardedstruct-field-priority } | `boolean` |  |  |






### guardedstruct.virtual_field
```elixir
virtual_field name, type
```








### Arguments

| Name | Type | Default | Docs |
|------|------|---------|------|
| [`name`](#guardedstruct-virtual_field-name){: #guardedstruct-virtual_field-name .spark-required} | `any` |  |  |
| [`type`](#guardedstruct-virtual_field-type){: #guardedstruct-virtual_field-type .spark-required} | `any` |  |  |
### Options

| Name | Type | Default | Docs |
|------|------|---------|------|
| [`enforce`](#guardedstruct-virtual_field-enforce){: #guardedstruct-virtual_field-enforce } | `boolean` |  |  |
| [`default`](#guardedstruct-virtual_field-default){: #guardedstruct-virtual_field-default } | `any` |  |  |
| [`derives`](#guardedstruct-virtual_field-derives){: #guardedstruct-virtual_field-derives } | `String.t` |  |  |
| [`derive`](#guardedstruct-virtual_field-derive){: #guardedstruct-virtual_field-derive } | `String.t` |  |  |
| [`validator`](#guardedstruct-virtual_field-validator){: #guardedstruct-virtual_field-validator } | `{atom, atom}` |  |  |
| [`auto`](#guardedstruct-virtual_field-auto){: #guardedstruct-virtual_field-auto } | `{atom, atom} \| {atom, atom, any}` |  |  |
| [`from`](#guardedstruct-virtual_field-from){: #guardedstruct-virtual_field-from } | `String.t` |  |  |
| [`on`](#guardedstruct-virtual_field-on){: #guardedstruct-virtual_field-on } | `String.t` |  |  |
| [`domain`](#guardedstruct-virtual_field-domain){: #guardedstruct-virtual_field-domain } | `String.t` |  |  |
| [`hint`](#guardedstruct-virtual_field-hint){: #guardedstruct-virtual_field-hint } | `String.t` |  |  |






### guardedstruct.dynamic_field
```elixir
dynamic_field name
```








### Arguments

| Name | Type | Default | Docs |
|------|------|---------|------|
| [`name`](#guardedstruct-dynamic_field-name){: #guardedstruct-dynamic_field-name .spark-required} | `any` |  |  |
### Options

| Name | Type | Default | Docs |
|------|------|---------|------|
| [`type`](#guardedstruct-dynamic_field-type){: #guardedstruct-dynamic_field-type } | `any` | `{:map, [], []}` |  |
| [`enforce`](#guardedstruct-dynamic_field-enforce){: #guardedstruct-dynamic_field-enforce } | `boolean` |  |  |
| [`default`](#guardedstruct-dynamic_field-default){: #guardedstruct-dynamic_field-default } | `any` | `%{}` |  |
| [`derives`](#guardedstruct-dynamic_field-derives){: #guardedstruct-dynamic_field-derives } | `String.t` | `"validate(map)"` |  |
| [`derive`](#guardedstruct-dynamic_field-derive){: #guardedstruct-dynamic_field-derive } | `String.t` |  |  |
| [`validator`](#guardedstruct-dynamic_field-validator){: #guardedstruct-dynamic_field-validator } | `{atom, atom}` |  |  |
| [`auto`](#guardedstruct-dynamic_field-auto){: #guardedstruct-dynamic_field-auto } | `{atom, atom} \| {atom, atom, any}` |  |  |
| [`from`](#guardedstruct-dynamic_field-from){: #guardedstruct-dynamic_field-from } | `String.t` |  |  |
| [`on`](#guardedstruct-dynamic_field-on){: #guardedstruct-dynamic_field-on } | `String.t` |  |  |
| [`domain`](#guardedstruct-dynamic_field-domain){: #guardedstruct-dynamic_field-domain } | `String.t` |  |  |
| [`hint`](#guardedstruct-dynamic_field-hint){: #guardedstruct-dynamic_field-hint } | `String.t` |  |  |






### guardedstruct.sub_field
```elixir
sub_field name, type
```




### Nested DSLs
 * [conditional_field](#guardedstruct-sub_field-conditional_field)
   * field
   * sub_field
     * field
 * [sub_field](#guardedstruct-sub_field-sub_field)
   * field
 * [field](#guardedstruct-sub_field-field)




### Arguments

| Name | Type | Default | Docs |
|------|------|---------|------|
| [`name`](#guardedstruct-sub_field-name){: #guardedstruct-sub_field-name .spark-required} | `atom` |  |  |
| [`type`](#guardedstruct-sub_field-type){: #guardedstruct-sub_field-type .spark-required} | `any` |  |  |
### Options

| Name | Type | Default | Docs |
|------|------|---------|------|
| [`enforce`](#guardedstruct-sub_field-enforce){: #guardedstruct-sub_field-enforce } | `boolean` |  |  |
| [`default`](#guardedstruct-sub_field-default){: #guardedstruct-sub_field-default } | `any` |  |  |
| [`derives`](#guardedstruct-sub_field-derives){: #guardedstruct-sub_field-derives } | `String.t` |  |  |
| [`derive`](#guardedstruct-sub_field-derive){: #guardedstruct-sub_field-derive } | `String.t` |  |  |
| [`validator`](#guardedstruct-sub_field-validator){: #guardedstruct-sub_field-validator } | `{atom, atom}` |  |  |
| [`auto`](#guardedstruct-sub_field-auto){: #guardedstruct-sub_field-auto } | `{atom, atom} \| {atom, atom, any}` |  |  |
| [`from`](#guardedstruct-sub_field-from){: #guardedstruct-sub_field-from } | `String.t` |  |  |
| [`on`](#guardedstruct-sub_field-on){: #guardedstruct-sub_field-on } | `String.t` |  |  |
| [`domain`](#guardedstruct-sub_field-domain){: #guardedstruct-sub_field-domain } | `String.t` |  |  |
| [`struct`](#guardedstruct-sub_field-struct){: #guardedstruct-sub_field-struct } | `atom` |  |  |
| [`structs`](#guardedstruct-sub_field-structs){: #guardedstruct-sub_field-structs } | `atom \| boolean` |  |  |
| [`hint`](#guardedstruct-sub_field-hint){: #guardedstruct-sub_field-hint } | `String.t` |  |  |
| [`priority`](#guardedstruct-sub_field-priority){: #guardedstruct-sub_field-priority } | `boolean` |  |  |
| [`error`](#guardedstruct-sub_field-error){: #guardedstruct-sub_field-error } | `boolean` |  |  |
| [`authorized_fields`](#guardedstruct-sub_field-authorized_fields){: #guardedstruct-sub_field-authorized_fields } | `boolean` |  |  |
| [`main_validator`](#guardedstruct-sub_field-main_validator){: #guardedstruct-sub_field-main_validator } | `{atom, atom}` |  | A `{Module, :function}` called with the sub_field's validated attributes, like the section option. A `main_validator/1` defined in the parent module does not run for a sub_field. |


### guardedstruct.sub_field.conditional_field
```elixir
conditional_field name, type
```




### Nested DSLs
 * [field](#guardedstruct-sub_field-conditional_field-field)
 * [sub_field](#guardedstruct-sub_field-conditional_field-sub_field)
   * field




### Arguments

| Name | Type | Default | Docs |
|------|------|---------|------|
| [`name`](#guardedstruct-sub_field-conditional_field-name){: #guardedstruct-sub_field-conditional_field-name .spark-required} | `atom` |  |  |
| [`type`](#guardedstruct-sub_field-conditional_field-type){: #guardedstruct-sub_field-conditional_field-type .spark-required} | `any` |  |  |
### Options

| Name | Type | Default | Docs |
|------|------|---------|------|
| [`enforce`](#guardedstruct-sub_field-conditional_field-enforce){: #guardedstruct-sub_field-conditional_field-enforce } | `boolean` |  |  |
| [`default`](#guardedstruct-sub_field-conditional_field-default){: #guardedstruct-sub_field-conditional_field-default } | `any` |  |  |
| [`derives`](#guardedstruct-sub_field-conditional_field-derives){: #guardedstruct-sub_field-conditional_field-derives } | `String.t` |  |  |
| [`derive`](#guardedstruct-sub_field-conditional_field-derive){: #guardedstruct-sub_field-conditional_field-derive } | `String.t` |  |  |
| [`validator`](#guardedstruct-sub_field-conditional_field-validator){: #guardedstruct-sub_field-conditional_field-validator } | `{atom, atom}` |  |  |
| [`auto`](#guardedstruct-sub_field-conditional_field-auto){: #guardedstruct-sub_field-conditional_field-auto } | `{atom, atom} \| {atom, atom, any}` |  |  |
| [`from`](#guardedstruct-sub_field-conditional_field-from){: #guardedstruct-sub_field-conditional_field-from } | `String.t` |  |  |
| [`on`](#guardedstruct-sub_field-conditional_field-on){: #guardedstruct-sub_field-conditional_field-on } | `String.t` |  |  |
| [`domain`](#guardedstruct-sub_field-conditional_field-domain){: #guardedstruct-sub_field-conditional_field-domain } | `String.t` |  |  |
| [`struct`](#guardedstruct-sub_field-conditional_field-struct){: #guardedstruct-sub_field-conditional_field-struct } | `atom` |  |  |
| [`structs`](#guardedstruct-sub_field-conditional_field-structs){: #guardedstruct-sub_field-conditional_field-structs } | `atom \| boolean` |  |  |
| [`hint`](#guardedstruct-sub_field-conditional_field-hint){: #guardedstruct-sub_field-conditional_field-hint } | `String.t` |  |  |
| [`priority`](#guardedstruct-sub_field-conditional_field-priority){: #guardedstruct-sub_field-conditional_field-priority } | `boolean` |  |  |


### guardedstruct.sub_field.conditional_field.field
```elixir
field name, type
```








### Arguments

| Name | Type | Default | Docs |
|------|------|---------|------|
| [`name`](#guardedstruct-sub_field-conditional_field-field-name){: #guardedstruct-sub_field-conditional_field-field-name .spark-required} | `any` |  |  |
| [`type`](#guardedstruct-sub_field-conditional_field-field-type){: #guardedstruct-sub_field-conditional_field-field-type .spark-required} | `any` |  |  |
### Options

| Name | Type | Default | Docs |
|------|------|---------|------|
| [`enforce`](#guardedstruct-sub_field-conditional_field-field-enforce){: #guardedstruct-sub_field-conditional_field-field-enforce } | `boolean` |  |  |
| [`default`](#guardedstruct-sub_field-conditional_field-field-default){: #guardedstruct-sub_field-conditional_field-field-default } | `any` |  |  |
| [`derives`](#guardedstruct-sub_field-conditional_field-field-derives){: #guardedstruct-sub_field-conditional_field-field-derives } | `String.t` |  |  |
| [`derive`](#guardedstruct-sub_field-conditional_field-field-derive){: #guardedstruct-sub_field-conditional_field-field-derive } | `String.t` |  |  |
| [`validator`](#guardedstruct-sub_field-conditional_field-field-validator){: #guardedstruct-sub_field-conditional_field-field-validator } | `{atom, atom}` |  |  |
| [`auto`](#guardedstruct-sub_field-conditional_field-field-auto){: #guardedstruct-sub_field-conditional_field-field-auto } | `{atom, atom} \| {atom, atom, any}` |  |  |
| [`from`](#guardedstruct-sub_field-conditional_field-field-from){: #guardedstruct-sub_field-conditional_field-field-from } | `String.t` |  |  |
| [`on`](#guardedstruct-sub_field-conditional_field-field-on){: #guardedstruct-sub_field-conditional_field-field-on } | `String.t` |  |  |
| [`domain`](#guardedstruct-sub_field-conditional_field-field-domain){: #guardedstruct-sub_field-conditional_field-field-domain } | `String.t` |  |  |
| [`struct`](#guardedstruct-sub_field-conditional_field-field-struct){: #guardedstruct-sub_field-conditional_field-field-struct } | `atom` |  |  |
| [`structs`](#guardedstruct-sub_field-conditional_field-field-structs){: #guardedstruct-sub_field-conditional_field-field-structs } | `atom \| boolean` |  |  |
| [`hint`](#guardedstruct-sub_field-conditional_field-field-hint){: #guardedstruct-sub_field-conditional_field-field-hint } | `String.t` |  |  |
| [`priority`](#guardedstruct-sub_field-conditional_field-field-priority){: #guardedstruct-sub_field-conditional_field-field-priority } | `boolean` |  |  |






### guardedstruct.sub_field.conditional_field.sub_field
```elixir
sub_field name, type
```




### Nested DSLs
 * [field](#guardedstruct-sub_field-conditional_field-sub_field-field)




### Arguments

| Name | Type | Default | Docs |
|------|------|---------|------|
| [`name`](#guardedstruct-sub_field-conditional_field-sub_field-name){: #guardedstruct-sub_field-conditional_field-sub_field-name .spark-required} | `atom` |  |  |
| [`type`](#guardedstruct-sub_field-conditional_field-sub_field-type){: #guardedstruct-sub_field-conditional_field-sub_field-type .spark-required} | `any` |  |  |
### Options

| Name | Type | Default | Docs |
|------|------|---------|------|
| [`enforce`](#guardedstruct-sub_field-conditional_field-sub_field-enforce){: #guardedstruct-sub_field-conditional_field-sub_field-enforce } | `boolean` |  |  |
| [`default`](#guardedstruct-sub_field-conditional_field-sub_field-default){: #guardedstruct-sub_field-conditional_field-sub_field-default } | `any` |  |  |
| [`derives`](#guardedstruct-sub_field-conditional_field-sub_field-derives){: #guardedstruct-sub_field-conditional_field-sub_field-derives } | `String.t` |  |  |
| [`derive`](#guardedstruct-sub_field-conditional_field-sub_field-derive){: #guardedstruct-sub_field-conditional_field-sub_field-derive } | `String.t` |  |  |
| [`validator`](#guardedstruct-sub_field-conditional_field-sub_field-validator){: #guardedstruct-sub_field-conditional_field-sub_field-validator } | `{atom, atom}` |  |  |
| [`auto`](#guardedstruct-sub_field-conditional_field-sub_field-auto){: #guardedstruct-sub_field-conditional_field-sub_field-auto } | `{atom, atom} \| {atom, atom, any}` |  |  |
| [`from`](#guardedstruct-sub_field-conditional_field-sub_field-from){: #guardedstruct-sub_field-conditional_field-sub_field-from } | `String.t` |  |  |
| [`on`](#guardedstruct-sub_field-conditional_field-sub_field-on){: #guardedstruct-sub_field-conditional_field-sub_field-on } | `String.t` |  |  |
| [`domain`](#guardedstruct-sub_field-conditional_field-sub_field-domain){: #guardedstruct-sub_field-conditional_field-sub_field-domain } | `String.t` |  |  |
| [`struct`](#guardedstruct-sub_field-conditional_field-sub_field-struct){: #guardedstruct-sub_field-conditional_field-sub_field-struct } | `atom` |  |  |
| [`structs`](#guardedstruct-sub_field-conditional_field-sub_field-structs){: #guardedstruct-sub_field-conditional_field-sub_field-structs } | `atom \| boolean` |  |  |
| [`hint`](#guardedstruct-sub_field-conditional_field-sub_field-hint){: #guardedstruct-sub_field-conditional_field-sub_field-hint } | `String.t` |  |  |
| [`priority`](#guardedstruct-sub_field-conditional_field-sub_field-priority){: #guardedstruct-sub_field-conditional_field-sub_field-priority } | `boolean` |  |  |
| [`error`](#guardedstruct-sub_field-conditional_field-sub_field-error){: #guardedstruct-sub_field-conditional_field-sub_field-error } | `boolean` |  |  |
| [`authorized_fields`](#guardedstruct-sub_field-conditional_field-sub_field-authorized_fields){: #guardedstruct-sub_field-conditional_field-sub_field-authorized_fields } | `boolean` |  |  |
| [`main_validator`](#guardedstruct-sub_field-conditional_field-sub_field-main_validator){: #guardedstruct-sub_field-conditional_field-sub_field-main_validator } | `{atom, atom}` |  | A `{Module, :function}` called with the sub_field's validated attributes, like the section option. A `main_validator/1` defined in the parent module does not run for a sub_field. |


### guardedstruct.sub_field.conditional_field.sub_field.field
```elixir
field name, type
```








### Arguments

| Name | Type | Default | Docs |
|------|------|---------|------|
| [`name`](#guardedstruct-sub_field-conditional_field-sub_field-field-name){: #guardedstruct-sub_field-conditional_field-sub_field-field-name .spark-required} | `any` |  |  |
| [`type`](#guardedstruct-sub_field-conditional_field-sub_field-field-type){: #guardedstruct-sub_field-conditional_field-sub_field-field-type .spark-required} | `any` |  |  |
### Options

| Name | Type | Default | Docs |
|------|------|---------|------|
| [`enforce`](#guardedstruct-sub_field-conditional_field-sub_field-field-enforce){: #guardedstruct-sub_field-conditional_field-sub_field-field-enforce } | `boolean` |  |  |
| [`default`](#guardedstruct-sub_field-conditional_field-sub_field-field-default){: #guardedstruct-sub_field-conditional_field-sub_field-field-default } | `any` |  |  |
| [`derives`](#guardedstruct-sub_field-conditional_field-sub_field-field-derives){: #guardedstruct-sub_field-conditional_field-sub_field-field-derives } | `String.t` |  |  |
| [`derive`](#guardedstruct-sub_field-conditional_field-sub_field-field-derive){: #guardedstruct-sub_field-conditional_field-sub_field-field-derive } | `String.t` |  |  |
| [`validator`](#guardedstruct-sub_field-conditional_field-sub_field-field-validator){: #guardedstruct-sub_field-conditional_field-sub_field-field-validator } | `{atom, atom}` |  |  |
| [`auto`](#guardedstruct-sub_field-conditional_field-sub_field-field-auto){: #guardedstruct-sub_field-conditional_field-sub_field-field-auto } | `{atom, atom} \| {atom, atom, any}` |  |  |
| [`from`](#guardedstruct-sub_field-conditional_field-sub_field-field-from){: #guardedstruct-sub_field-conditional_field-sub_field-field-from } | `String.t` |  |  |
| [`on`](#guardedstruct-sub_field-conditional_field-sub_field-field-on){: #guardedstruct-sub_field-conditional_field-sub_field-field-on } | `String.t` |  |  |
| [`domain`](#guardedstruct-sub_field-conditional_field-sub_field-field-domain){: #guardedstruct-sub_field-conditional_field-sub_field-field-domain } | `String.t` |  |  |
| [`struct`](#guardedstruct-sub_field-conditional_field-sub_field-field-struct){: #guardedstruct-sub_field-conditional_field-sub_field-field-struct } | `atom` |  |  |
| [`structs`](#guardedstruct-sub_field-conditional_field-sub_field-field-structs){: #guardedstruct-sub_field-conditional_field-sub_field-field-structs } | `atom \| boolean` |  |  |
| [`hint`](#guardedstruct-sub_field-conditional_field-sub_field-field-hint){: #guardedstruct-sub_field-conditional_field-sub_field-field-hint } | `String.t` |  |  |
| [`priority`](#guardedstruct-sub_field-conditional_field-sub_field-field-priority){: #guardedstruct-sub_field-conditional_field-sub_field-field-priority } | `boolean` |  |  |














### guardedstruct.sub_field.sub_field
```elixir
sub_field name, type
```




### Nested DSLs
 * [field](#guardedstruct-sub_field-sub_field-field)




### Arguments

| Name | Type | Default | Docs |
|------|------|---------|------|
| [`name`](#guardedstruct-sub_field-sub_field-name){: #guardedstruct-sub_field-sub_field-name .spark-required} | `atom` |  |  |
| [`type`](#guardedstruct-sub_field-sub_field-type){: #guardedstruct-sub_field-sub_field-type .spark-required} | `any` |  |  |
### Options

| Name | Type | Default | Docs |
|------|------|---------|------|
| [`enforce`](#guardedstruct-sub_field-sub_field-enforce){: #guardedstruct-sub_field-sub_field-enforce } | `boolean` |  |  |
| [`default`](#guardedstruct-sub_field-sub_field-default){: #guardedstruct-sub_field-sub_field-default } | `any` |  |  |
| [`derives`](#guardedstruct-sub_field-sub_field-derives){: #guardedstruct-sub_field-sub_field-derives } | `String.t` |  |  |
| [`derive`](#guardedstruct-sub_field-sub_field-derive){: #guardedstruct-sub_field-sub_field-derive } | `String.t` |  |  |
| [`validator`](#guardedstruct-sub_field-sub_field-validator){: #guardedstruct-sub_field-sub_field-validator } | `{atom, atom}` |  |  |
| [`auto`](#guardedstruct-sub_field-sub_field-auto){: #guardedstruct-sub_field-sub_field-auto } | `{atom, atom} \| {atom, atom, any}` |  |  |
| [`from`](#guardedstruct-sub_field-sub_field-from){: #guardedstruct-sub_field-sub_field-from } | `String.t` |  |  |
| [`on`](#guardedstruct-sub_field-sub_field-on){: #guardedstruct-sub_field-sub_field-on } | `String.t` |  |  |
| [`domain`](#guardedstruct-sub_field-sub_field-domain){: #guardedstruct-sub_field-sub_field-domain } | `String.t` |  |  |
| [`struct`](#guardedstruct-sub_field-sub_field-struct){: #guardedstruct-sub_field-sub_field-struct } | `atom` |  |  |
| [`structs`](#guardedstruct-sub_field-sub_field-structs){: #guardedstruct-sub_field-sub_field-structs } | `atom \| boolean` |  |  |
| [`hint`](#guardedstruct-sub_field-sub_field-hint){: #guardedstruct-sub_field-sub_field-hint } | `String.t` |  |  |
| [`priority`](#guardedstruct-sub_field-sub_field-priority){: #guardedstruct-sub_field-sub_field-priority } | `boolean` |  |  |
| [`error`](#guardedstruct-sub_field-sub_field-error){: #guardedstruct-sub_field-sub_field-error } | `boolean` |  |  |
| [`authorized_fields`](#guardedstruct-sub_field-sub_field-authorized_fields){: #guardedstruct-sub_field-sub_field-authorized_fields } | `boolean` |  |  |
| [`main_validator`](#guardedstruct-sub_field-sub_field-main_validator){: #guardedstruct-sub_field-sub_field-main_validator } | `{atom, atom}` |  | A `{Module, :function}` called with the sub_field's validated attributes, like the section option. A `main_validator/1` defined in the parent module does not run for a sub_field. |


### guardedstruct.sub_field.sub_field.field
```elixir
field name, type
```








### Arguments

| Name | Type | Default | Docs |
|------|------|---------|------|
| [`name`](#guardedstruct-sub_field-sub_field-field-name){: #guardedstruct-sub_field-sub_field-field-name .spark-required} | `any` |  |  |
| [`type`](#guardedstruct-sub_field-sub_field-field-type){: #guardedstruct-sub_field-sub_field-field-type .spark-required} | `any` |  |  |
### Options

| Name | Type | Default | Docs |
|------|------|---------|------|
| [`enforce`](#guardedstruct-sub_field-sub_field-field-enforce){: #guardedstruct-sub_field-sub_field-field-enforce } | `boolean` |  |  |
| [`default`](#guardedstruct-sub_field-sub_field-field-default){: #guardedstruct-sub_field-sub_field-field-default } | `any` |  |  |
| [`derives`](#guardedstruct-sub_field-sub_field-field-derives){: #guardedstruct-sub_field-sub_field-field-derives } | `String.t` |  |  |
| [`derive`](#guardedstruct-sub_field-sub_field-field-derive){: #guardedstruct-sub_field-sub_field-field-derive } | `String.t` |  |  |
| [`validator`](#guardedstruct-sub_field-sub_field-field-validator){: #guardedstruct-sub_field-sub_field-field-validator } | `{atom, atom}` |  |  |
| [`auto`](#guardedstruct-sub_field-sub_field-field-auto){: #guardedstruct-sub_field-sub_field-field-auto } | `{atom, atom} \| {atom, atom, any}` |  |  |
| [`from`](#guardedstruct-sub_field-sub_field-field-from){: #guardedstruct-sub_field-sub_field-field-from } | `String.t` |  |  |
| [`on`](#guardedstruct-sub_field-sub_field-field-on){: #guardedstruct-sub_field-sub_field-field-on } | `String.t` |  |  |
| [`domain`](#guardedstruct-sub_field-sub_field-field-domain){: #guardedstruct-sub_field-sub_field-field-domain } | `String.t` |  |  |
| [`struct`](#guardedstruct-sub_field-sub_field-field-struct){: #guardedstruct-sub_field-sub_field-field-struct } | `atom` |  |  |
| [`structs`](#guardedstruct-sub_field-sub_field-field-structs){: #guardedstruct-sub_field-sub_field-field-structs } | `atom \| boolean` |  |  |
| [`hint`](#guardedstruct-sub_field-sub_field-field-hint){: #guardedstruct-sub_field-sub_field-field-hint } | `String.t` |  |  |
| [`priority`](#guardedstruct-sub_field-sub_field-field-priority){: #guardedstruct-sub_field-sub_field-field-priority } | `boolean` |  |  |










### guardedstruct.sub_field.field
```elixir
field name, type
```








### Arguments

| Name | Type | Default | Docs |
|------|------|---------|------|
| [`name`](#guardedstruct-sub_field-field-name){: #guardedstruct-sub_field-field-name .spark-required} | `any` |  |  |
| [`type`](#guardedstruct-sub_field-field-type){: #guardedstruct-sub_field-field-type .spark-required} | `any` |  |  |
### Options

| Name | Type | Default | Docs |
|------|------|---------|------|
| [`enforce`](#guardedstruct-sub_field-field-enforce){: #guardedstruct-sub_field-field-enforce } | `boolean` |  |  |
| [`default`](#guardedstruct-sub_field-field-default){: #guardedstruct-sub_field-field-default } | `any` |  |  |
| [`derives`](#guardedstruct-sub_field-field-derives){: #guardedstruct-sub_field-field-derives } | `String.t` |  |  |
| [`derive`](#guardedstruct-sub_field-field-derive){: #guardedstruct-sub_field-field-derive } | `String.t` |  |  |
| [`validator`](#guardedstruct-sub_field-field-validator){: #guardedstruct-sub_field-field-validator } | `{atom, atom}` |  |  |
| [`auto`](#guardedstruct-sub_field-field-auto){: #guardedstruct-sub_field-field-auto } | `{atom, atom} \| {atom, atom, any}` |  |  |
| [`from`](#guardedstruct-sub_field-field-from){: #guardedstruct-sub_field-field-from } | `String.t` |  |  |
| [`on`](#guardedstruct-sub_field-field-on){: #guardedstruct-sub_field-field-on } | `String.t` |  |  |
| [`domain`](#guardedstruct-sub_field-field-domain){: #guardedstruct-sub_field-field-domain } | `String.t` |  |  |
| [`struct`](#guardedstruct-sub_field-field-struct){: #guardedstruct-sub_field-field-struct } | `atom` |  |  |
| [`structs`](#guardedstruct-sub_field-field-structs){: #guardedstruct-sub_field-field-structs } | `atom \| boolean` |  |  |
| [`hint`](#guardedstruct-sub_field-field-hint){: #guardedstruct-sub_field-field-hint } | `String.t` |  |  |
| [`priority`](#guardedstruct-sub_field-field-priority){: #guardedstruct-sub_field-field-priority } | `boolean` |  |  |










### guardedstruct.conditional_field
```elixir
conditional_field name, type
```




### Nested DSLs
 * [sub_field](#guardedstruct-conditional_field-sub_field)
   * conditional_field
     * field
     * sub_field
       * field
   * sub_field
     * field
   * field
 * [conditional_field](#guardedstruct-conditional_field-conditional_field)
   * field
   * sub_field
     * field
 * [field](#guardedstruct-conditional_field-field)




### Arguments

| Name | Type | Default | Docs |
|------|------|---------|------|
| [`name`](#guardedstruct-conditional_field-name){: #guardedstruct-conditional_field-name .spark-required} | `atom` |  |  |
| [`type`](#guardedstruct-conditional_field-type){: #guardedstruct-conditional_field-type .spark-required} | `any` |  |  |
### Options

| Name | Type | Default | Docs |
|------|------|---------|------|
| [`enforce`](#guardedstruct-conditional_field-enforce){: #guardedstruct-conditional_field-enforce } | `boolean` |  |  |
| [`default`](#guardedstruct-conditional_field-default){: #guardedstruct-conditional_field-default } | `any` |  |  |
| [`derives`](#guardedstruct-conditional_field-derives){: #guardedstruct-conditional_field-derives } | `String.t` |  |  |
| [`derive`](#guardedstruct-conditional_field-derive){: #guardedstruct-conditional_field-derive } | `String.t` |  |  |
| [`validator`](#guardedstruct-conditional_field-validator){: #guardedstruct-conditional_field-validator } | `{atom, atom}` |  |  |
| [`auto`](#guardedstruct-conditional_field-auto){: #guardedstruct-conditional_field-auto } | `{atom, atom} \| {atom, atom, any}` |  |  |
| [`from`](#guardedstruct-conditional_field-from){: #guardedstruct-conditional_field-from } | `String.t` |  |  |
| [`on`](#guardedstruct-conditional_field-on){: #guardedstruct-conditional_field-on } | `String.t` |  |  |
| [`domain`](#guardedstruct-conditional_field-domain){: #guardedstruct-conditional_field-domain } | `String.t` |  |  |
| [`struct`](#guardedstruct-conditional_field-struct){: #guardedstruct-conditional_field-struct } | `atom` |  |  |
| [`structs`](#guardedstruct-conditional_field-structs){: #guardedstruct-conditional_field-structs } | `atom \| boolean` |  |  |
| [`hint`](#guardedstruct-conditional_field-hint){: #guardedstruct-conditional_field-hint } | `String.t` |  |  |
| [`priority`](#guardedstruct-conditional_field-priority){: #guardedstruct-conditional_field-priority } | `boolean` |  |  |


### guardedstruct.conditional_field.sub_field
```elixir
sub_field name, type
```




### Nested DSLs
 * [conditional_field](#guardedstruct-conditional_field-sub_field-conditional_field)
   * field
   * sub_field
     * field
 * [sub_field](#guardedstruct-conditional_field-sub_field-sub_field)
   * field
 * [field](#guardedstruct-conditional_field-sub_field-field)




### Arguments

| Name | Type | Default | Docs |
|------|------|---------|------|
| [`name`](#guardedstruct-conditional_field-sub_field-name){: #guardedstruct-conditional_field-sub_field-name .spark-required} | `atom` |  |  |
| [`type`](#guardedstruct-conditional_field-sub_field-type){: #guardedstruct-conditional_field-sub_field-type .spark-required} | `any` |  |  |
### Options

| Name | Type | Default | Docs |
|------|------|---------|------|
| [`enforce`](#guardedstruct-conditional_field-sub_field-enforce){: #guardedstruct-conditional_field-sub_field-enforce } | `boolean` |  |  |
| [`default`](#guardedstruct-conditional_field-sub_field-default){: #guardedstruct-conditional_field-sub_field-default } | `any` |  |  |
| [`derives`](#guardedstruct-conditional_field-sub_field-derives){: #guardedstruct-conditional_field-sub_field-derives } | `String.t` |  |  |
| [`derive`](#guardedstruct-conditional_field-sub_field-derive){: #guardedstruct-conditional_field-sub_field-derive } | `String.t` |  |  |
| [`validator`](#guardedstruct-conditional_field-sub_field-validator){: #guardedstruct-conditional_field-sub_field-validator } | `{atom, atom}` |  |  |
| [`auto`](#guardedstruct-conditional_field-sub_field-auto){: #guardedstruct-conditional_field-sub_field-auto } | `{atom, atom} \| {atom, atom, any}` |  |  |
| [`from`](#guardedstruct-conditional_field-sub_field-from){: #guardedstruct-conditional_field-sub_field-from } | `String.t` |  |  |
| [`on`](#guardedstruct-conditional_field-sub_field-on){: #guardedstruct-conditional_field-sub_field-on } | `String.t` |  |  |
| [`domain`](#guardedstruct-conditional_field-sub_field-domain){: #guardedstruct-conditional_field-sub_field-domain } | `String.t` |  |  |
| [`struct`](#guardedstruct-conditional_field-sub_field-struct){: #guardedstruct-conditional_field-sub_field-struct } | `atom` |  |  |
| [`structs`](#guardedstruct-conditional_field-sub_field-structs){: #guardedstruct-conditional_field-sub_field-structs } | `atom \| boolean` |  |  |
| [`hint`](#guardedstruct-conditional_field-sub_field-hint){: #guardedstruct-conditional_field-sub_field-hint } | `String.t` |  |  |
| [`priority`](#guardedstruct-conditional_field-sub_field-priority){: #guardedstruct-conditional_field-sub_field-priority } | `boolean` |  |  |
| [`error`](#guardedstruct-conditional_field-sub_field-error){: #guardedstruct-conditional_field-sub_field-error } | `boolean` |  |  |
| [`authorized_fields`](#guardedstruct-conditional_field-sub_field-authorized_fields){: #guardedstruct-conditional_field-sub_field-authorized_fields } | `boolean` |  |  |
| [`main_validator`](#guardedstruct-conditional_field-sub_field-main_validator){: #guardedstruct-conditional_field-sub_field-main_validator } | `{atom, atom}` |  | A `{Module, :function}` called with the sub_field's validated attributes, like the section option. A `main_validator/1` defined in the parent module does not run for a sub_field. |


### guardedstruct.conditional_field.sub_field.conditional_field
```elixir
conditional_field name, type
```




### Nested DSLs
 * [field](#guardedstruct-conditional_field-sub_field-conditional_field-field)
 * [sub_field](#guardedstruct-conditional_field-sub_field-conditional_field-sub_field)
   * field




### Arguments

| Name | Type | Default | Docs |
|------|------|---------|------|
| [`name`](#guardedstruct-conditional_field-sub_field-conditional_field-name){: #guardedstruct-conditional_field-sub_field-conditional_field-name .spark-required} | `atom` |  |  |
| [`type`](#guardedstruct-conditional_field-sub_field-conditional_field-type){: #guardedstruct-conditional_field-sub_field-conditional_field-type .spark-required} | `any` |  |  |
### Options

| Name | Type | Default | Docs |
|------|------|---------|------|
| [`enforce`](#guardedstruct-conditional_field-sub_field-conditional_field-enforce){: #guardedstruct-conditional_field-sub_field-conditional_field-enforce } | `boolean` |  |  |
| [`default`](#guardedstruct-conditional_field-sub_field-conditional_field-default){: #guardedstruct-conditional_field-sub_field-conditional_field-default } | `any` |  |  |
| [`derives`](#guardedstruct-conditional_field-sub_field-conditional_field-derives){: #guardedstruct-conditional_field-sub_field-conditional_field-derives } | `String.t` |  |  |
| [`derive`](#guardedstruct-conditional_field-sub_field-conditional_field-derive){: #guardedstruct-conditional_field-sub_field-conditional_field-derive } | `String.t` |  |  |
| [`validator`](#guardedstruct-conditional_field-sub_field-conditional_field-validator){: #guardedstruct-conditional_field-sub_field-conditional_field-validator } | `{atom, atom}` |  |  |
| [`auto`](#guardedstruct-conditional_field-sub_field-conditional_field-auto){: #guardedstruct-conditional_field-sub_field-conditional_field-auto } | `{atom, atom} \| {atom, atom, any}` |  |  |
| [`from`](#guardedstruct-conditional_field-sub_field-conditional_field-from){: #guardedstruct-conditional_field-sub_field-conditional_field-from } | `String.t` |  |  |
| [`on`](#guardedstruct-conditional_field-sub_field-conditional_field-on){: #guardedstruct-conditional_field-sub_field-conditional_field-on } | `String.t` |  |  |
| [`domain`](#guardedstruct-conditional_field-sub_field-conditional_field-domain){: #guardedstruct-conditional_field-sub_field-conditional_field-domain } | `String.t` |  |  |
| [`struct`](#guardedstruct-conditional_field-sub_field-conditional_field-struct){: #guardedstruct-conditional_field-sub_field-conditional_field-struct } | `atom` |  |  |
| [`structs`](#guardedstruct-conditional_field-sub_field-conditional_field-structs){: #guardedstruct-conditional_field-sub_field-conditional_field-structs } | `atom \| boolean` |  |  |
| [`hint`](#guardedstruct-conditional_field-sub_field-conditional_field-hint){: #guardedstruct-conditional_field-sub_field-conditional_field-hint } | `String.t` |  |  |
| [`priority`](#guardedstruct-conditional_field-sub_field-conditional_field-priority){: #guardedstruct-conditional_field-sub_field-conditional_field-priority } | `boolean` |  |  |


### guardedstruct.conditional_field.sub_field.conditional_field.field
```elixir
field name, type
```








### Arguments

| Name | Type | Default | Docs |
|------|------|---------|------|
| [`name`](#guardedstruct-conditional_field-sub_field-conditional_field-field-name){: #guardedstruct-conditional_field-sub_field-conditional_field-field-name .spark-required} | `any` |  |  |
| [`type`](#guardedstruct-conditional_field-sub_field-conditional_field-field-type){: #guardedstruct-conditional_field-sub_field-conditional_field-field-type .spark-required} | `any` |  |  |
### Options

| Name | Type | Default | Docs |
|------|------|---------|------|
| [`enforce`](#guardedstruct-conditional_field-sub_field-conditional_field-field-enforce){: #guardedstruct-conditional_field-sub_field-conditional_field-field-enforce } | `boolean` |  |  |
| [`default`](#guardedstruct-conditional_field-sub_field-conditional_field-field-default){: #guardedstruct-conditional_field-sub_field-conditional_field-field-default } | `any` |  |  |
| [`derives`](#guardedstruct-conditional_field-sub_field-conditional_field-field-derives){: #guardedstruct-conditional_field-sub_field-conditional_field-field-derives } | `String.t` |  |  |
| [`derive`](#guardedstruct-conditional_field-sub_field-conditional_field-field-derive){: #guardedstruct-conditional_field-sub_field-conditional_field-field-derive } | `String.t` |  |  |
| [`validator`](#guardedstruct-conditional_field-sub_field-conditional_field-field-validator){: #guardedstruct-conditional_field-sub_field-conditional_field-field-validator } | `{atom, atom}` |  |  |
| [`auto`](#guardedstruct-conditional_field-sub_field-conditional_field-field-auto){: #guardedstruct-conditional_field-sub_field-conditional_field-field-auto } | `{atom, atom} \| {atom, atom, any}` |  |  |
| [`from`](#guardedstruct-conditional_field-sub_field-conditional_field-field-from){: #guardedstruct-conditional_field-sub_field-conditional_field-field-from } | `String.t` |  |  |
| [`on`](#guardedstruct-conditional_field-sub_field-conditional_field-field-on){: #guardedstruct-conditional_field-sub_field-conditional_field-field-on } | `String.t` |  |  |
| [`domain`](#guardedstruct-conditional_field-sub_field-conditional_field-field-domain){: #guardedstruct-conditional_field-sub_field-conditional_field-field-domain } | `String.t` |  |  |
| [`struct`](#guardedstruct-conditional_field-sub_field-conditional_field-field-struct){: #guardedstruct-conditional_field-sub_field-conditional_field-field-struct } | `atom` |  |  |
| [`structs`](#guardedstruct-conditional_field-sub_field-conditional_field-field-structs){: #guardedstruct-conditional_field-sub_field-conditional_field-field-structs } | `atom \| boolean` |  |  |
| [`hint`](#guardedstruct-conditional_field-sub_field-conditional_field-field-hint){: #guardedstruct-conditional_field-sub_field-conditional_field-field-hint } | `String.t` |  |  |
| [`priority`](#guardedstruct-conditional_field-sub_field-conditional_field-field-priority){: #guardedstruct-conditional_field-sub_field-conditional_field-field-priority } | `boolean` |  |  |






### guardedstruct.conditional_field.sub_field.conditional_field.sub_field
```elixir
sub_field name, type
```




### Nested DSLs
 * [field](#guardedstruct-conditional_field-sub_field-conditional_field-sub_field-field)




### Arguments

| Name | Type | Default | Docs |
|------|------|---------|------|
| [`name`](#guardedstruct-conditional_field-sub_field-conditional_field-sub_field-name){: #guardedstruct-conditional_field-sub_field-conditional_field-sub_field-name .spark-required} | `atom` |  |  |
| [`type`](#guardedstruct-conditional_field-sub_field-conditional_field-sub_field-type){: #guardedstruct-conditional_field-sub_field-conditional_field-sub_field-type .spark-required} | `any` |  |  |
### Options

| Name | Type | Default | Docs |
|------|------|---------|------|
| [`enforce`](#guardedstruct-conditional_field-sub_field-conditional_field-sub_field-enforce){: #guardedstruct-conditional_field-sub_field-conditional_field-sub_field-enforce } | `boolean` |  |  |
| [`default`](#guardedstruct-conditional_field-sub_field-conditional_field-sub_field-default){: #guardedstruct-conditional_field-sub_field-conditional_field-sub_field-default } | `any` |  |  |
| [`derives`](#guardedstruct-conditional_field-sub_field-conditional_field-sub_field-derives){: #guardedstruct-conditional_field-sub_field-conditional_field-sub_field-derives } | `String.t` |  |  |
| [`derive`](#guardedstruct-conditional_field-sub_field-conditional_field-sub_field-derive){: #guardedstruct-conditional_field-sub_field-conditional_field-sub_field-derive } | `String.t` |  |  |
| [`validator`](#guardedstruct-conditional_field-sub_field-conditional_field-sub_field-validator){: #guardedstruct-conditional_field-sub_field-conditional_field-sub_field-validator } | `{atom, atom}` |  |  |
| [`auto`](#guardedstruct-conditional_field-sub_field-conditional_field-sub_field-auto){: #guardedstruct-conditional_field-sub_field-conditional_field-sub_field-auto } | `{atom, atom} \| {atom, atom, any}` |  |  |
| [`from`](#guardedstruct-conditional_field-sub_field-conditional_field-sub_field-from){: #guardedstruct-conditional_field-sub_field-conditional_field-sub_field-from } | `String.t` |  |  |
| [`on`](#guardedstruct-conditional_field-sub_field-conditional_field-sub_field-on){: #guardedstruct-conditional_field-sub_field-conditional_field-sub_field-on } | `String.t` |  |  |
| [`domain`](#guardedstruct-conditional_field-sub_field-conditional_field-sub_field-domain){: #guardedstruct-conditional_field-sub_field-conditional_field-sub_field-domain } | `String.t` |  |  |
| [`struct`](#guardedstruct-conditional_field-sub_field-conditional_field-sub_field-struct){: #guardedstruct-conditional_field-sub_field-conditional_field-sub_field-struct } | `atom` |  |  |
| [`structs`](#guardedstruct-conditional_field-sub_field-conditional_field-sub_field-structs){: #guardedstruct-conditional_field-sub_field-conditional_field-sub_field-structs } | `atom \| boolean` |  |  |
| [`hint`](#guardedstruct-conditional_field-sub_field-conditional_field-sub_field-hint){: #guardedstruct-conditional_field-sub_field-conditional_field-sub_field-hint } | `String.t` |  |  |
| [`priority`](#guardedstruct-conditional_field-sub_field-conditional_field-sub_field-priority){: #guardedstruct-conditional_field-sub_field-conditional_field-sub_field-priority } | `boolean` |  |  |
| [`error`](#guardedstruct-conditional_field-sub_field-conditional_field-sub_field-error){: #guardedstruct-conditional_field-sub_field-conditional_field-sub_field-error } | `boolean` |  |  |
| [`authorized_fields`](#guardedstruct-conditional_field-sub_field-conditional_field-sub_field-authorized_fields){: #guardedstruct-conditional_field-sub_field-conditional_field-sub_field-authorized_fields } | `boolean` |  |  |
| [`main_validator`](#guardedstruct-conditional_field-sub_field-conditional_field-sub_field-main_validator){: #guardedstruct-conditional_field-sub_field-conditional_field-sub_field-main_validator } | `{atom, atom}` |  | A `{Module, :function}` called with the sub_field's validated attributes, like the section option. A `main_validator/1` defined in the parent module does not run for a sub_field. |


### guardedstruct.conditional_field.sub_field.conditional_field.sub_field.field
```elixir
field name, type
```








### Arguments

| Name | Type | Default | Docs |
|------|------|---------|------|
| [`name`](#guardedstruct-conditional_field-sub_field-conditional_field-sub_field-field-name){: #guardedstruct-conditional_field-sub_field-conditional_field-sub_field-field-name .spark-required} | `any` |  |  |
| [`type`](#guardedstruct-conditional_field-sub_field-conditional_field-sub_field-field-type){: #guardedstruct-conditional_field-sub_field-conditional_field-sub_field-field-type .spark-required} | `any` |  |  |
### Options

| Name | Type | Default | Docs |
|------|------|---------|------|
| [`enforce`](#guardedstruct-conditional_field-sub_field-conditional_field-sub_field-field-enforce){: #guardedstruct-conditional_field-sub_field-conditional_field-sub_field-field-enforce } | `boolean` |  |  |
| [`default`](#guardedstruct-conditional_field-sub_field-conditional_field-sub_field-field-default){: #guardedstruct-conditional_field-sub_field-conditional_field-sub_field-field-default } | `any` |  |  |
| [`derives`](#guardedstruct-conditional_field-sub_field-conditional_field-sub_field-field-derives){: #guardedstruct-conditional_field-sub_field-conditional_field-sub_field-field-derives } | `String.t` |  |  |
| [`derive`](#guardedstruct-conditional_field-sub_field-conditional_field-sub_field-field-derive){: #guardedstruct-conditional_field-sub_field-conditional_field-sub_field-field-derive } | `String.t` |  |  |
| [`validator`](#guardedstruct-conditional_field-sub_field-conditional_field-sub_field-field-validator){: #guardedstruct-conditional_field-sub_field-conditional_field-sub_field-field-validator } | `{atom, atom}` |  |  |
| [`auto`](#guardedstruct-conditional_field-sub_field-conditional_field-sub_field-field-auto){: #guardedstruct-conditional_field-sub_field-conditional_field-sub_field-field-auto } | `{atom, atom} \| {atom, atom, any}` |  |  |
| [`from`](#guardedstruct-conditional_field-sub_field-conditional_field-sub_field-field-from){: #guardedstruct-conditional_field-sub_field-conditional_field-sub_field-field-from } | `String.t` |  |  |
| [`on`](#guardedstruct-conditional_field-sub_field-conditional_field-sub_field-field-on){: #guardedstruct-conditional_field-sub_field-conditional_field-sub_field-field-on } | `String.t` |  |  |
| [`domain`](#guardedstruct-conditional_field-sub_field-conditional_field-sub_field-field-domain){: #guardedstruct-conditional_field-sub_field-conditional_field-sub_field-field-domain } | `String.t` |  |  |
| [`struct`](#guardedstruct-conditional_field-sub_field-conditional_field-sub_field-field-struct){: #guardedstruct-conditional_field-sub_field-conditional_field-sub_field-field-struct } | `atom` |  |  |
| [`structs`](#guardedstruct-conditional_field-sub_field-conditional_field-sub_field-field-structs){: #guardedstruct-conditional_field-sub_field-conditional_field-sub_field-field-structs } | `atom \| boolean` |  |  |
| [`hint`](#guardedstruct-conditional_field-sub_field-conditional_field-sub_field-field-hint){: #guardedstruct-conditional_field-sub_field-conditional_field-sub_field-field-hint } | `String.t` |  |  |
| [`priority`](#guardedstruct-conditional_field-sub_field-conditional_field-sub_field-field-priority){: #guardedstruct-conditional_field-sub_field-conditional_field-sub_field-field-priority } | `boolean` |  |  |














### guardedstruct.conditional_field.sub_field.sub_field
```elixir
sub_field name, type
```




### Nested DSLs
 * [field](#guardedstruct-conditional_field-sub_field-sub_field-field)




### Arguments

| Name | Type | Default | Docs |
|------|------|---------|------|
| [`name`](#guardedstruct-conditional_field-sub_field-sub_field-name){: #guardedstruct-conditional_field-sub_field-sub_field-name .spark-required} | `atom` |  |  |
| [`type`](#guardedstruct-conditional_field-sub_field-sub_field-type){: #guardedstruct-conditional_field-sub_field-sub_field-type .spark-required} | `any` |  |  |
### Options

| Name | Type | Default | Docs |
|------|------|---------|------|
| [`enforce`](#guardedstruct-conditional_field-sub_field-sub_field-enforce){: #guardedstruct-conditional_field-sub_field-sub_field-enforce } | `boolean` |  |  |
| [`default`](#guardedstruct-conditional_field-sub_field-sub_field-default){: #guardedstruct-conditional_field-sub_field-sub_field-default } | `any` |  |  |
| [`derives`](#guardedstruct-conditional_field-sub_field-sub_field-derives){: #guardedstruct-conditional_field-sub_field-sub_field-derives } | `String.t` |  |  |
| [`derive`](#guardedstruct-conditional_field-sub_field-sub_field-derive){: #guardedstruct-conditional_field-sub_field-sub_field-derive } | `String.t` |  |  |
| [`validator`](#guardedstruct-conditional_field-sub_field-sub_field-validator){: #guardedstruct-conditional_field-sub_field-sub_field-validator } | `{atom, atom}` |  |  |
| [`auto`](#guardedstruct-conditional_field-sub_field-sub_field-auto){: #guardedstruct-conditional_field-sub_field-sub_field-auto } | `{atom, atom} \| {atom, atom, any}` |  |  |
| [`from`](#guardedstruct-conditional_field-sub_field-sub_field-from){: #guardedstruct-conditional_field-sub_field-sub_field-from } | `String.t` |  |  |
| [`on`](#guardedstruct-conditional_field-sub_field-sub_field-on){: #guardedstruct-conditional_field-sub_field-sub_field-on } | `String.t` |  |  |
| [`domain`](#guardedstruct-conditional_field-sub_field-sub_field-domain){: #guardedstruct-conditional_field-sub_field-sub_field-domain } | `String.t` |  |  |
| [`struct`](#guardedstruct-conditional_field-sub_field-sub_field-struct){: #guardedstruct-conditional_field-sub_field-sub_field-struct } | `atom` |  |  |
| [`structs`](#guardedstruct-conditional_field-sub_field-sub_field-structs){: #guardedstruct-conditional_field-sub_field-sub_field-structs } | `atom \| boolean` |  |  |
| [`hint`](#guardedstruct-conditional_field-sub_field-sub_field-hint){: #guardedstruct-conditional_field-sub_field-sub_field-hint } | `String.t` |  |  |
| [`priority`](#guardedstruct-conditional_field-sub_field-sub_field-priority){: #guardedstruct-conditional_field-sub_field-sub_field-priority } | `boolean` |  |  |
| [`error`](#guardedstruct-conditional_field-sub_field-sub_field-error){: #guardedstruct-conditional_field-sub_field-sub_field-error } | `boolean` |  |  |
| [`authorized_fields`](#guardedstruct-conditional_field-sub_field-sub_field-authorized_fields){: #guardedstruct-conditional_field-sub_field-sub_field-authorized_fields } | `boolean` |  |  |
| [`main_validator`](#guardedstruct-conditional_field-sub_field-sub_field-main_validator){: #guardedstruct-conditional_field-sub_field-sub_field-main_validator } | `{atom, atom}` |  | A `{Module, :function}` called with the sub_field's validated attributes, like the section option. A `main_validator/1` defined in the parent module does not run for a sub_field. |


### guardedstruct.conditional_field.sub_field.sub_field.field
```elixir
field name, type
```








### Arguments

| Name | Type | Default | Docs |
|------|------|---------|------|
| [`name`](#guardedstruct-conditional_field-sub_field-sub_field-field-name){: #guardedstruct-conditional_field-sub_field-sub_field-field-name .spark-required} | `any` |  |  |
| [`type`](#guardedstruct-conditional_field-sub_field-sub_field-field-type){: #guardedstruct-conditional_field-sub_field-sub_field-field-type .spark-required} | `any` |  |  |
### Options

| Name | Type | Default | Docs |
|------|------|---------|------|
| [`enforce`](#guardedstruct-conditional_field-sub_field-sub_field-field-enforce){: #guardedstruct-conditional_field-sub_field-sub_field-field-enforce } | `boolean` |  |  |
| [`default`](#guardedstruct-conditional_field-sub_field-sub_field-field-default){: #guardedstruct-conditional_field-sub_field-sub_field-field-default } | `any` |  |  |
| [`derives`](#guardedstruct-conditional_field-sub_field-sub_field-field-derives){: #guardedstruct-conditional_field-sub_field-sub_field-field-derives } | `String.t` |  |  |
| [`derive`](#guardedstruct-conditional_field-sub_field-sub_field-field-derive){: #guardedstruct-conditional_field-sub_field-sub_field-field-derive } | `String.t` |  |  |
| [`validator`](#guardedstruct-conditional_field-sub_field-sub_field-field-validator){: #guardedstruct-conditional_field-sub_field-sub_field-field-validator } | `{atom, atom}` |  |  |
| [`auto`](#guardedstruct-conditional_field-sub_field-sub_field-field-auto){: #guardedstruct-conditional_field-sub_field-sub_field-field-auto } | `{atom, atom} \| {atom, atom, any}` |  |  |
| [`from`](#guardedstruct-conditional_field-sub_field-sub_field-field-from){: #guardedstruct-conditional_field-sub_field-sub_field-field-from } | `String.t` |  |  |
| [`on`](#guardedstruct-conditional_field-sub_field-sub_field-field-on){: #guardedstruct-conditional_field-sub_field-sub_field-field-on } | `String.t` |  |  |
| [`domain`](#guardedstruct-conditional_field-sub_field-sub_field-field-domain){: #guardedstruct-conditional_field-sub_field-sub_field-field-domain } | `String.t` |  |  |
| [`struct`](#guardedstruct-conditional_field-sub_field-sub_field-field-struct){: #guardedstruct-conditional_field-sub_field-sub_field-field-struct } | `atom` |  |  |
| [`structs`](#guardedstruct-conditional_field-sub_field-sub_field-field-structs){: #guardedstruct-conditional_field-sub_field-sub_field-field-structs } | `atom \| boolean` |  |  |
| [`hint`](#guardedstruct-conditional_field-sub_field-sub_field-field-hint){: #guardedstruct-conditional_field-sub_field-sub_field-field-hint } | `String.t` |  |  |
| [`priority`](#guardedstruct-conditional_field-sub_field-sub_field-field-priority){: #guardedstruct-conditional_field-sub_field-sub_field-field-priority } | `boolean` |  |  |










### guardedstruct.conditional_field.sub_field.field
```elixir
field name, type
```








### Arguments

| Name | Type | Default | Docs |
|------|------|---------|------|
| [`name`](#guardedstruct-conditional_field-sub_field-field-name){: #guardedstruct-conditional_field-sub_field-field-name .spark-required} | `any` |  |  |
| [`type`](#guardedstruct-conditional_field-sub_field-field-type){: #guardedstruct-conditional_field-sub_field-field-type .spark-required} | `any` |  |  |
### Options

| Name | Type | Default | Docs |
|------|------|---------|------|
| [`enforce`](#guardedstruct-conditional_field-sub_field-field-enforce){: #guardedstruct-conditional_field-sub_field-field-enforce } | `boolean` |  |  |
| [`default`](#guardedstruct-conditional_field-sub_field-field-default){: #guardedstruct-conditional_field-sub_field-field-default } | `any` |  |  |
| [`derives`](#guardedstruct-conditional_field-sub_field-field-derives){: #guardedstruct-conditional_field-sub_field-field-derives } | `String.t` |  |  |
| [`derive`](#guardedstruct-conditional_field-sub_field-field-derive){: #guardedstruct-conditional_field-sub_field-field-derive } | `String.t` |  |  |
| [`validator`](#guardedstruct-conditional_field-sub_field-field-validator){: #guardedstruct-conditional_field-sub_field-field-validator } | `{atom, atom}` |  |  |
| [`auto`](#guardedstruct-conditional_field-sub_field-field-auto){: #guardedstruct-conditional_field-sub_field-field-auto } | `{atom, atom} \| {atom, atom, any}` |  |  |
| [`from`](#guardedstruct-conditional_field-sub_field-field-from){: #guardedstruct-conditional_field-sub_field-field-from } | `String.t` |  |  |
| [`on`](#guardedstruct-conditional_field-sub_field-field-on){: #guardedstruct-conditional_field-sub_field-field-on } | `String.t` |  |  |
| [`domain`](#guardedstruct-conditional_field-sub_field-field-domain){: #guardedstruct-conditional_field-sub_field-field-domain } | `String.t` |  |  |
| [`struct`](#guardedstruct-conditional_field-sub_field-field-struct){: #guardedstruct-conditional_field-sub_field-field-struct } | `atom` |  |  |
| [`structs`](#guardedstruct-conditional_field-sub_field-field-structs){: #guardedstruct-conditional_field-sub_field-field-structs } | `atom \| boolean` |  |  |
| [`hint`](#guardedstruct-conditional_field-sub_field-field-hint){: #guardedstruct-conditional_field-sub_field-field-hint } | `String.t` |  |  |
| [`priority`](#guardedstruct-conditional_field-sub_field-field-priority){: #guardedstruct-conditional_field-sub_field-field-priority } | `boolean` |  |  |










### guardedstruct.conditional_field.conditional_field
```elixir
conditional_field name, type
```




### Nested DSLs
 * [field](#guardedstruct-conditional_field-conditional_field-field)
 * [sub_field](#guardedstruct-conditional_field-conditional_field-sub_field)
   * field




### Arguments

| Name | Type | Default | Docs |
|------|------|---------|------|
| [`name`](#guardedstruct-conditional_field-conditional_field-name){: #guardedstruct-conditional_field-conditional_field-name .spark-required} | `atom` |  |  |
| [`type`](#guardedstruct-conditional_field-conditional_field-type){: #guardedstruct-conditional_field-conditional_field-type .spark-required} | `any` |  |  |
### Options

| Name | Type | Default | Docs |
|------|------|---------|------|
| [`enforce`](#guardedstruct-conditional_field-conditional_field-enforce){: #guardedstruct-conditional_field-conditional_field-enforce } | `boolean` |  |  |
| [`default`](#guardedstruct-conditional_field-conditional_field-default){: #guardedstruct-conditional_field-conditional_field-default } | `any` |  |  |
| [`derives`](#guardedstruct-conditional_field-conditional_field-derives){: #guardedstruct-conditional_field-conditional_field-derives } | `String.t` |  |  |
| [`derive`](#guardedstruct-conditional_field-conditional_field-derive){: #guardedstruct-conditional_field-conditional_field-derive } | `String.t` |  |  |
| [`validator`](#guardedstruct-conditional_field-conditional_field-validator){: #guardedstruct-conditional_field-conditional_field-validator } | `{atom, atom}` |  |  |
| [`auto`](#guardedstruct-conditional_field-conditional_field-auto){: #guardedstruct-conditional_field-conditional_field-auto } | `{atom, atom} \| {atom, atom, any}` |  |  |
| [`from`](#guardedstruct-conditional_field-conditional_field-from){: #guardedstruct-conditional_field-conditional_field-from } | `String.t` |  |  |
| [`on`](#guardedstruct-conditional_field-conditional_field-on){: #guardedstruct-conditional_field-conditional_field-on } | `String.t` |  |  |
| [`domain`](#guardedstruct-conditional_field-conditional_field-domain){: #guardedstruct-conditional_field-conditional_field-domain } | `String.t` |  |  |
| [`struct`](#guardedstruct-conditional_field-conditional_field-struct){: #guardedstruct-conditional_field-conditional_field-struct } | `atom` |  |  |
| [`structs`](#guardedstruct-conditional_field-conditional_field-structs){: #guardedstruct-conditional_field-conditional_field-structs } | `atom \| boolean` |  |  |
| [`hint`](#guardedstruct-conditional_field-conditional_field-hint){: #guardedstruct-conditional_field-conditional_field-hint } | `String.t` |  |  |
| [`priority`](#guardedstruct-conditional_field-conditional_field-priority){: #guardedstruct-conditional_field-conditional_field-priority } | `boolean` |  |  |


### guardedstruct.conditional_field.conditional_field.field
```elixir
field name, type
```








### Arguments

| Name | Type | Default | Docs |
|------|------|---------|------|
| [`name`](#guardedstruct-conditional_field-conditional_field-field-name){: #guardedstruct-conditional_field-conditional_field-field-name .spark-required} | `any` |  |  |
| [`type`](#guardedstruct-conditional_field-conditional_field-field-type){: #guardedstruct-conditional_field-conditional_field-field-type .spark-required} | `any` |  |  |
### Options

| Name | Type | Default | Docs |
|------|------|---------|------|
| [`enforce`](#guardedstruct-conditional_field-conditional_field-field-enforce){: #guardedstruct-conditional_field-conditional_field-field-enforce } | `boolean` |  |  |
| [`default`](#guardedstruct-conditional_field-conditional_field-field-default){: #guardedstruct-conditional_field-conditional_field-field-default } | `any` |  |  |
| [`derives`](#guardedstruct-conditional_field-conditional_field-field-derives){: #guardedstruct-conditional_field-conditional_field-field-derives } | `String.t` |  |  |
| [`derive`](#guardedstruct-conditional_field-conditional_field-field-derive){: #guardedstruct-conditional_field-conditional_field-field-derive } | `String.t` |  |  |
| [`validator`](#guardedstruct-conditional_field-conditional_field-field-validator){: #guardedstruct-conditional_field-conditional_field-field-validator } | `{atom, atom}` |  |  |
| [`auto`](#guardedstruct-conditional_field-conditional_field-field-auto){: #guardedstruct-conditional_field-conditional_field-field-auto } | `{atom, atom} \| {atom, atom, any}` |  |  |
| [`from`](#guardedstruct-conditional_field-conditional_field-field-from){: #guardedstruct-conditional_field-conditional_field-field-from } | `String.t` |  |  |
| [`on`](#guardedstruct-conditional_field-conditional_field-field-on){: #guardedstruct-conditional_field-conditional_field-field-on } | `String.t` |  |  |
| [`domain`](#guardedstruct-conditional_field-conditional_field-field-domain){: #guardedstruct-conditional_field-conditional_field-field-domain } | `String.t` |  |  |
| [`struct`](#guardedstruct-conditional_field-conditional_field-field-struct){: #guardedstruct-conditional_field-conditional_field-field-struct } | `atom` |  |  |
| [`structs`](#guardedstruct-conditional_field-conditional_field-field-structs){: #guardedstruct-conditional_field-conditional_field-field-structs } | `atom \| boolean` |  |  |
| [`hint`](#guardedstruct-conditional_field-conditional_field-field-hint){: #guardedstruct-conditional_field-conditional_field-field-hint } | `String.t` |  |  |
| [`priority`](#guardedstruct-conditional_field-conditional_field-field-priority){: #guardedstruct-conditional_field-conditional_field-field-priority } | `boolean` |  |  |






### guardedstruct.conditional_field.conditional_field.sub_field
```elixir
sub_field name, type
```




### Nested DSLs
 * [field](#guardedstruct-conditional_field-conditional_field-sub_field-field)




### Arguments

| Name | Type | Default | Docs |
|------|------|---------|------|
| [`name`](#guardedstruct-conditional_field-conditional_field-sub_field-name){: #guardedstruct-conditional_field-conditional_field-sub_field-name .spark-required} | `atom` |  |  |
| [`type`](#guardedstruct-conditional_field-conditional_field-sub_field-type){: #guardedstruct-conditional_field-conditional_field-sub_field-type .spark-required} | `any` |  |  |
### Options

| Name | Type | Default | Docs |
|------|------|---------|------|
| [`enforce`](#guardedstruct-conditional_field-conditional_field-sub_field-enforce){: #guardedstruct-conditional_field-conditional_field-sub_field-enforce } | `boolean` |  |  |
| [`default`](#guardedstruct-conditional_field-conditional_field-sub_field-default){: #guardedstruct-conditional_field-conditional_field-sub_field-default } | `any` |  |  |
| [`derives`](#guardedstruct-conditional_field-conditional_field-sub_field-derives){: #guardedstruct-conditional_field-conditional_field-sub_field-derives } | `String.t` |  |  |
| [`derive`](#guardedstruct-conditional_field-conditional_field-sub_field-derive){: #guardedstruct-conditional_field-conditional_field-sub_field-derive } | `String.t` |  |  |
| [`validator`](#guardedstruct-conditional_field-conditional_field-sub_field-validator){: #guardedstruct-conditional_field-conditional_field-sub_field-validator } | `{atom, atom}` |  |  |
| [`auto`](#guardedstruct-conditional_field-conditional_field-sub_field-auto){: #guardedstruct-conditional_field-conditional_field-sub_field-auto } | `{atom, atom} \| {atom, atom, any}` |  |  |
| [`from`](#guardedstruct-conditional_field-conditional_field-sub_field-from){: #guardedstruct-conditional_field-conditional_field-sub_field-from } | `String.t` |  |  |
| [`on`](#guardedstruct-conditional_field-conditional_field-sub_field-on){: #guardedstruct-conditional_field-conditional_field-sub_field-on } | `String.t` |  |  |
| [`domain`](#guardedstruct-conditional_field-conditional_field-sub_field-domain){: #guardedstruct-conditional_field-conditional_field-sub_field-domain } | `String.t` |  |  |
| [`struct`](#guardedstruct-conditional_field-conditional_field-sub_field-struct){: #guardedstruct-conditional_field-conditional_field-sub_field-struct } | `atom` |  |  |
| [`structs`](#guardedstruct-conditional_field-conditional_field-sub_field-structs){: #guardedstruct-conditional_field-conditional_field-sub_field-structs } | `atom \| boolean` |  |  |
| [`hint`](#guardedstruct-conditional_field-conditional_field-sub_field-hint){: #guardedstruct-conditional_field-conditional_field-sub_field-hint } | `String.t` |  |  |
| [`priority`](#guardedstruct-conditional_field-conditional_field-sub_field-priority){: #guardedstruct-conditional_field-conditional_field-sub_field-priority } | `boolean` |  |  |
| [`error`](#guardedstruct-conditional_field-conditional_field-sub_field-error){: #guardedstruct-conditional_field-conditional_field-sub_field-error } | `boolean` |  |  |
| [`authorized_fields`](#guardedstruct-conditional_field-conditional_field-sub_field-authorized_fields){: #guardedstruct-conditional_field-conditional_field-sub_field-authorized_fields } | `boolean` |  |  |
| [`main_validator`](#guardedstruct-conditional_field-conditional_field-sub_field-main_validator){: #guardedstruct-conditional_field-conditional_field-sub_field-main_validator } | `{atom, atom}` |  | A `{Module, :function}` called with the sub_field's validated attributes, like the section option. A `main_validator/1` defined in the parent module does not run for a sub_field. |


### guardedstruct.conditional_field.conditional_field.sub_field.field
```elixir
field name, type
```








### Arguments

| Name | Type | Default | Docs |
|------|------|---------|------|
| [`name`](#guardedstruct-conditional_field-conditional_field-sub_field-field-name){: #guardedstruct-conditional_field-conditional_field-sub_field-field-name .spark-required} | `any` |  |  |
| [`type`](#guardedstruct-conditional_field-conditional_field-sub_field-field-type){: #guardedstruct-conditional_field-conditional_field-sub_field-field-type .spark-required} | `any` |  |  |
### Options

| Name | Type | Default | Docs |
|------|------|---------|------|
| [`enforce`](#guardedstruct-conditional_field-conditional_field-sub_field-field-enforce){: #guardedstruct-conditional_field-conditional_field-sub_field-field-enforce } | `boolean` |  |  |
| [`default`](#guardedstruct-conditional_field-conditional_field-sub_field-field-default){: #guardedstruct-conditional_field-conditional_field-sub_field-field-default } | `any` |  |  |
| [`derives`](#guardedstruct-conditional_field-conditional_field-sub_field-field-derives){: #guardedstruct-conditional_field-conditional_field-sub_field-field-derives } | `String.t` |  |  |
| [`derive`](#guardedstruct-conditional_field-conditional_field-sub_field-field-derive){: #guardedstruct-conditional_field-conditional_field-sub_field-field-derive } | `String.t` |  |  |
| [`validator`](#guardedstruct-conditional_field-conditional_field-sub_field-field-validator){: #guardedstruct-conditional_field-conditional_field-sub_field-field-validator } | `{atom, atom}` |  |  |
| [`auto`](#guardedstruct-conditional_field-conditional_field-sub_field-field-auto){: #guardedstruct-conditional_field-conditional_field-sub_field-field-auto } | `{atom, atom} \| {atom, atom, any}` |  |  |
| [`from`](#guardedstruct-conditional_field-conditional_field-sub_field-field-from){: #guardedstruct-conditional_field-conditional_field-sub_field-field-from } | `String.t` |  |  |
| [`on`](#guardedstruct-conditional_field-conditional_field-sub_field-field-on){: #guardedstruct-conditional_field-conditional_field-sub_field-field-on } | `String.t` |  |  |
| [`domain`](#guardedstruct-conditional_field-conditional_field-sub_field-field-domain){: #guardedstruct-conditional_field-conditional_field-sub_field-field-domain } | `String.t` |  |  |
| [`struct`](#guardedstruct-conditional_field-conditional_field-sub_field-field-struct){: #guardedstruct-conditional_field-conditional_field-sub_field-field-struct } | `atom` |  |  |
| [`structs`](#guardedstruct-conditional_field-conditional_field-sub_field-field-structs){: #guardedstruct-conditional_field-conditional_field-sub_field-field-structs } | `atom \| boolean` |  |  |
| [`hint`](#guardedstruct-conditional_field-conditional_field-sub_field-field-hint){: #guardedstruct-conditional_field-conditional_field-sub_field-field-hint } | `String.t` |  |  |
| [`priority`](#guardedstruct-conditional_field-conditional_field-sub_field-field-priority){: #guardedstruct-conditional_field-conditional_field-sub_field-field-priority } | `boolean` |  |  |














### guardedstruct.conditional_field.field
```elixir
field name, type
```








### Arguments

| Name | Type | Default | Docs |
|------|------|---------|------|
| [`name`](#guardedstruct-conditional_field-field-name){: #guardedstruct-conditional_field-field-name .spark-required} | `any` |  |  |
| [`type`](#guardedstruct-conditional_field-field-type){: #guardedstruct-conditional_field-field-type .spark-required} | `any` |  |  |
### Options

| Name | Type | Default | Docs |
|------|------|---------|------|
| [`enforce`](#guardedstruct-conditional_field-field-enforce){: #guardedstruct-conditional_field-field-enforce } | `boolean` |  |  |
| [`default`](#guardedstruct-conditional_field-field-default){: #guardedstruct-conditional_field-field-default } | `any` |  |  |
| [`derives`](#guardedstruct-conditional_field-field-derives){: #guardedstruct-conditional_field-field-derives } | `String.t` |  |  |
| [`derive`](#guardedstruct-conditional_field-field-derive){: #guardedstruct-conditional_field-field-derive } | `String.t` |  |  |
| [`validator`](#guardedstruct-conditional_field-field-validator){: #guardedstruct-conditional_field-field-validator } | `{atom, atom}` |  |  |
| [`auto`](#guardedstruct-conditional_field-field-auto){: #guardedstruct-conditional_field-field-auto } | `{atom, atom} \| {atom, atom, any}` |  |  |
| [`from`](#guardedstruct-conditional_field-field-from){: #guardedstruct-conditional_field-field-from } | `String.t` |  |  |
| [`on`](#guardedstruct-conditional_field-field-on){: #guardedstruct-conditional_field-field-on } | `String.t` |  |  |
| [`domain`](#guardedstruct-conditional_field-field-domain){: #guardedstruct-conditional_field-field-domain } | `String.t` |  |  |
| [`struct`](#guardedstruct-conditional_field-field-struct){: #guardedstruct-conditional_field-field-struct } | `atom` |  |  |
| [`structs`](#guardedstruct-conditional_field-field-structs){: #guardedstruct-conditional_field-field-structs } | `atom \| boolean` |  |  |
| [`hint`](#guardedstruct-conditional_field-field-hint){: #guardedstruct-conditional_field-field-hint } | `String.t` |  |  |
| [`priority`](#guardedstruct-conditional_field-field-priority){: #guardedstruct-conditional_field-field-priority } | `boolean` |  |  |














<style type="text/css">.spark-required::after { content: "*"; color: red !important; }</style>
