# database-core
The database-agnostic interface for Fluid Attacks ETLs, in Rust: what a table
is, independent of the database it lives in. Each database has its own loader
built on it (for example `snowflake-loader`).
The workspace is split into a pure core and a shell that re-exports it:
- `crates/domain` (`fluidattacks-database-core-domain`) — functional core with
no I/O: the names of database objects (`Identifier`, `SchemaId`, `TableId`,
`ColumnId`, `DbTableId`), the cell types (`CellType`, `RawValue`,
`Decimal`, `Numeric`, `FieldType` / `IntoValue`, `KeyField`), the table
definition (`Column`, `Schema`, `Table`) and the `table!` macro that
declares a table once. `no_std`.
- `crates/shell` (`fluidattacks-database-core`) — the crate consumers depend
on; it re-exports the domain.