# `Estructura.Full`
[🔗](https://github.com/am-kantox/estructura/blob/v1.13.0/test/support/structs.ex#L27)

Full Example

# `__generator__`

See `Estructura.Full.__generator__/2`

# `__generator__`

Returns the generator to be used in `StreamData`-powered property testing, based
  on the specification given to `use Estructura`, which contained

## shape
```elixir
%Estructura.Config{
  access: true,
  coercion: [:foo],
  validation: true,
  calculated: [],
  collectable: :bar,
  enumerable: true,
  generator: [
    foo: {StreamData, :integer, [0..1000]},
    bar: {StreamData, :string, [:alphanumeric]},
    baz: {StreamData, :fixed_map,
     [[key1: {StreamData, :integer}, key2: {StreamData, :integer}]]},
    zzz: &Estructura.Full.zzz_generator/0
  ]
}
```

The argument given would be used as a template to generate new values.

# `get`

```elixir
@spec get(
  %Estructura.Full{bar: term(), baz: term(), foo: term(), zzz: term()},
  Estructura.Config.key(),
  any()
) :: any()
```

Gets the value for the given key from the structure

# `put`

```elixir
@spec put(
  %Estructura.Full{bar: term(), baz: term(), foo: term(), zzz: term()},
  Estructura.Config.key(),
  any()
) ::
  {:ok, %Estructura.Full{bar: term(), baz: term(), foo: term(), zzz: term()}}
  | {:error, any()}
```

Puts the value for the given key into the structure, passing coercion _and_ validation,
  returns `{:ok, updated_struct}` or `{:error, reason}` if there is no such key

# `put!`

```elixir
@spec put!(
  %Estructura.Full{bar: term(), baz: term(), foo: term(), zzz: term()},
  Estructura.Config.key(),
  any()
) ::
  %Estructura.Full{bar: term(), baz: term(), foo: term(), zzz: term()}
  | no_return()
```

Puts the value for the given key into the structure, passing coercion _and_ validation,
  returns the value or raises if there is no such key

# `recalculate_calculated`

Recalculates calculated fields for the instance of Estructura.Full.

Normally one would not need to call this function explicitly because `Access`
  implementation would do that.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
