# estructura v1.13.0 - Table of Contents

> Extensions for Elixir structures.

## Pages

- [Estructura](readme.md)
- [Powerful Nested Structures](powerful-nested-structures.md)
- [Tests as First-Class Citizens](tests-as-first-class-citizens.md)
- [Estructura Cheatsheet](estructura.md)

## Modules

- [Estructura](Estructura.md): `Estructura` is a set of extensions for Elixir structures,
  such as `Access` implementation, `Enumerable` and `Collectable`
  implementations, validations and test data generation via `StreamData`.
- [Estructura.Aston](Estructura.Aston.md): The implementation of `Estructura` ready to work with tree AST-like structure

- [Estructura.Coercer](Estructura.Coercer.md): Behaviour for coercion delegates. Instead of implementing the coercion handlers
  in `Estructura.Nested` inplace, one might do
    
```elixir
coerce do
  defdelegate foo.bar.created_at(value), to: :date
end
```
- [Estructura.Nested](Estructura.Nested.md): The nested struct with helpers to easily describe it and produce
  validation, coercion, and generation helpers.

- Generators
  - [Estructura.StreamData](Estructura.StreamData.md): Additional generators to be used with `__generator__/1` generated by `Use Estructura`

- Type Scaffolds
  - [Estructura.Nested.Type.Enum](Estructura.Nested.Type.Enum.md): `Estructura` type scaffold for creating enumerated types with a limited set of valid values.
  - [Estructura.Nested.Type.Struct](Estructura.Nested.Type.Struct.md): `Estructura` type scaffold for creating validatable and coercible types for structs.
  - [Estructura.Nested.Type.Tags](Estructura.Nested.Type.Tags.md): `Estructura` type for a set of predefined values, might be used as an implementation generator.

  - [Estructura.Nested.Type.TimeSeries](Estructura.Nested.Type.TimeSeries.md): `Estructura` type scaffold for creating time series types, where the value is
  predictable changing with a time.

- JSON Schema
  - [Estructura.Nested.JsonSchema](Estructura.Nested.JsonSchema.md): Converts [JSON Schema](https://json-schema.org/) definitions into
`Estructura.Nested`-compatible shape maps.

- Types
  - [Estructura.Nested.Type](Estructura.Nested.Type.md): The type to be used for coercing, validating, and generation
  of the implementation’s instances.

  - [Estructura.Nested.Type.Date](Estructura.Nested.Type.Date.md): `Estructura` type implementation for handling `Date` values.
  - [Estructura.Nested.Type.DateTime](Estructura.Nested.Type.DateTime.md): `Estructura` type implementation for handling `DateTime` values.
  - [Estructura.Nested.Type.IP](Estructura.Nested.Type.IP.md): `Estructura` type for `Date`

  - [Estructura.Nested.Type.String](Estructura.Nested.Type.String.md): `Estructura` type for `String`

  - [Estructura.Nested.Type.Time](Estructura.Nested.Type.Time.md): `Estructura` type implementation for handling `Time` values.
  - [Estructura.Nested.Type.URI](Estructura.Nested.Type.URI.md): `Estructura` type implementation for handling `URI` values.
  - [Estructura.Nested.Type.UUID](Estructura.Nested.Type.UUID.md): `Estructura` type for `UUID`

- Lazy
  - [Estructura.Lazy](Estructura.Lazy.md): The field stub allowing lazy instantiation of `Estructura` fields.

  - [Estructura.LazyMap](Estructura.LazyMap.md): The implementation of lazy map implementing lazy `Access` for its keys.

- Protocols
  - [Estructura.Flattenable](Estructura.Flattenable.md)
  - [Estructura.Transformer](Estructura.Transformer.md)

- Internals
  - [Estructura.Config](Estructura.Config.md): The configuration of the `Estructura` that is built from the parameters,
passed as a second argument in a call to `use Estructura`.

- Examples
  - [Estructura.Full](Estructura.Full.md): Full Example
  - [Estructura.User](Estructura.User.md): Nested example. The source code of the file follows.

