sheeter-engine 0.10.0

A CLI tool for converting data files between formats. v0.1.0 supports CSV <-> JSON.
Documentation
# Sheeter

Convert data files between formats from the command line.

**Eight formats, fifty-six routes.** CSV, TSV, JSON, YAML, XML, TOML, XLSX,
SQL — any direction, through a single canonical hub.

## Install

    cargo install sheeter-engine

The installed binary is `sheeter`.

## Usage

    sheeter convert --from <FMT> --to <FMT> [OPTIONS] <input> <output>

Formats: `csv`, `tsv`, `json`, `yaml`, `xml`, `toml`, `xlsx`, `sql`.

### Options

    --sheet NAME      Select one sheet (XLSX input only)
    --dialect NAME    SQL dialect: generic, postgresql, sqlite, mysql
    --filter EXPR     Filter rows (e.g. "age > 30 and city == 'SP'")
    --select COLS     Keep only these columns (comma-separated)
    --rename PAIRS    Rename columns (e.g. "old=new,foo=bar")
    --limit N         Keep at most N rows
    --sort SPEC       Sort by column(s) (e.g. "age desc,name")
    --dedup           Drop duplicate rows (whole row)
    --dedup-by COLS   Drop duplicates by column(s)

### Examples

    # CSV → JSON
    sheeter convert --from csv --to json data.csv data.json

    # Filter, select, and rename in one pass
    sheeter convert --from csv --to csv \
      --filter "age >= 30" \
      --select "name,age,salary" \
      --rename "salary=wage" \
      data.csv result.csv

    # Sort large CSV in bounded memory
    sheeter convert --from csv --to csv --sort "age desc" big.csv sorted.csv

    # Multi-sheet XLSX → one CSV per sheet
    sheeter convert --from xlsx --to csv report.xlsx report.csv

    # Inspect any data file
    sheeter inspect --format xlsx report.xlsx

## How it works

Every reader produces a `CanonicalValue`; every writer consumes one. Adding
a new format costs one reader and one writer, not `N-1` pairwise converters.

## Streaming vs buffered

| Input → Output | Memory | Transforms applied |
|---|---|---|
| CSV/TSV → CSV/TSV, no `--sort` | Constant | Yes (per row) |
| CSV/TSV → CSV/TSV, with `--sort` | Bounded by 50k-row chunk | Yes |
| Any other pair | Full document in memory | Yes (round-trip through hub) |

`--sort` on non-CSV/TSV paths buffers the whole document and currently
applies transforms but not sorting; full buffered sort arrives in v0.11.0.

## Versioning

This project follows [Semantic Versioning 2.0.0](https://semver.org/spec/v2.0.0.html).
Changelog follows [Keep a Changelog 1.1.0](https://keepachangelog.com/en/1.1.0/).
Commit messages follow [Conventional Commits 1.0.0](https://www.conventionalcommits.org/en/v1.0.0/).