# AshCsvInterchange v0.1.0 - Table of Contents

> An Ash extension for declaring CSV-importable and CSV-exportable resources via a Spark DSL.

## GUIDES

- [AshCsvInterchange](readme.md)
- [Rules for working with AshCsvInterchange](usage-rules.md)
- [Changelog](changelog.md)

- Guides
  - [Getting started](getting-started.md)
  - [Defining imports](defining-imports.md)
  - [Running imports](running-imports.md)
  - [Exports](exports.md)

- DSL reference
  - [AshCsvInterchange](dsl-ashcsvinterchange.md)

## Modules

- [AshCsvInterchange](AshCsvInterchange.md): An Ash extension for moving CSV data in and out of Ash resources.
Resources that use it expose
- [AshCsvInterchange.Dsl](AshCsvInterchange.Dsl.md): Spark DSL section for AshCsvInterchange. Declares the `csv_imports` block
resources use to register one or more CSV import types.

- [AshCsvInterchange.Error](AshCsvInterchange.Error.md): An `AshCsvInterchange` error or non-fatal warning, used by both the
import and export sides.
- [AshCsvInterchange.Export.Orchestrator](AshCsvInterchange.Export.Orchestrator.md): Builds the lazy stream of CSV chunks for an export type.
- [AshCsvInterchange.Export.Serializer](AshCsvInterchange.Export.Serializer.md): Renders Ash records into CSV cells per the column declarations on an
`AshCsvInterchange.Export.Type`.
- [AshCsvInterchange.Export.Type](AshCsvInterchange.Export.Type.md): Resolved DSL config for one `csv_export` entity. Spark builds one
struct per entity in a resource's `csv_exports` block, keyed by `id`.

- [AshCsvInterchange.Import.HeaderCheck](AshCsvInterchange.Import.HeaderCheck.md): Validates a parsed CSV header row against the type's declared headers.
Header names are compared after whitespace trim and ASCII case-fold.
- [AshCsvInterchange.Import.Orchestrator](AshCsvInterchange.Import.Orchestrator.md): Runs the CSV import pipeline. `import_csv/4` returns a bounded
`%RunReport{}`. `stream_import/4` returns lazy per-row outcomes.
- [AshCsvInterchange.Import.Parser](AshCsvInterchange.Import.Parser.md): RFC 4180 CSV parser with an eager path and a streaming path.
- [AshCsvInterchange.Import.RowOutcome](AshCsvInterchange.Import.RowOutcome.md): The result of processing a single CSV row.
- [AshCsvInterchange.Import.RunReport](AshCsvInterchange.Import.RunReport.md): Structured result of a CSV import run.
- [AshCsvInterchange.Import.RunReport.Counts](AshCsvInterchange.Import.RunReport.Counts.md): Aggregate counts derived from the per-row outcomes. `created` and
`updated` are commit-mode only.

- [AshCsvInterchange.Import.StreamReport](AshCsvInterchange.Import.StreamReport.md): Result of `AshCsvInterchange.stream_import/3`.
- [AshCsvInterchange.Import.Type](AshCsvInterchange.Import.Type.md): Struct that holds a single `csv_import` entity's resolved DSL config.
Each entity inside a resource's `csv_imports do ... end` block is built
into one `%AshCsvInterchange.Import.Type{}` keyed by `id`.

- [AshCsvInterchange.Info](AshCsvInterchange.Info.md): Introspection helpers for `AshCsvInterchange`-using resources.
- [AshCsvInterchange.Transformers.ValidateImportAction](AshCsvInterchange.Transformers.ValidateImportAction.md): Compile-time validation for AshCsvInterchange DSL config. For every
`csv_import` entity declared on the resource
- [AshCsvInterchange.Transformers.ValidateReadAction](AshCsvInterchange.Transformers.ValidateReadAction.md): Compile-time validation for `csv_exports` entities. For every
`csv_export` entity declared on the resource

