Skip to main content

Crate table_editor

Crate table_editor 

Source
Expand description

A browser-based editor for a repository’s JSONL tables.

A repository describes its tables by implementing TableLogic once per table—parse, serialize, validate, derive, siblings, and a column Schema—and App once for the collection. Server turns that into a local HTTP server: it serves the embedded browser bundle at / and the editor’s API under /api.

The API is GET /api/app for the shell (the app’s name and its tables) and three endpoints per table: GET /api/<table> reads, PUT /api/<table> writes, and POST /api/<table>/derive validates and derives without writing. GET /api/health and POST /api/shutdown control the process. All file I/O runs here, through the Context that resolves the Data/ directory; the browser is a thin UI that renders whatever the schema in the GET payload describes.

Launching reuses an already-running server on the same port (it just opens a browser at it); --restart shuts the old one down first and starts fresh. The server itself runs as a detached worker process, marked by an environment variable so it serves rather than re-spawning itself.

§Features

server is on by default and is everything above. Without it the crate is the file format alone—jsonl, ParseError, ValidationError, and ApiError—and depends on nothing but serde and serde_json, which is what a crate that only reads and writes the tables wants.

Modules§

jsonl
Reading and writing the one-row-per-line JSON the tables are stored as.

Structs§

ApiError
A failure with the HTTP status to report it under. Body and parse problems are 400, an endpoint reached by the wrong method is 405, and filesystem and serialization failures are 500.
Column
One column of a table.
Context
The Data/ directory a request’s tables live in. Sibling reads go through it too, so a table that cross-checks against another reads it from the same place the editor writes it.
FromRows
A completion list the browser builds from the rows on screen: trim each named field, drop the row when the first field is blank, join the non-blank ones with separator, then dedupe and sort.
MapSpec
The extra description a map column carries. A bundle renders one chip per entry as key: value, drops an entry whose value is cleared, and writes a map that empties as an absent field.
NewRow
How a new row starts: take defaults, then overwrite each field named in carry_forward with the value the last row that has one carries, so a run of rows sharing a genre or a publisher is typed once.
OptionsBy
A select whose options depend on another column: the browser looks the row’s value of field up in options. A value with no entry offers no choices.
Param
One control at the top of a view.
ParseError
A line of a JSONL file that does not deserialize into its row type.
Schema
One table’s presentation: the columns, how a new row starts, and any completion lists the columns draw on.
Section
One run of rows under a heading of its own.
SelectOption
One choice in a select. label is what the browser shows when it differs from the stored value.
Server
The editor’s HTTP server, configured for one repository.
ServerArgs
The arguments the editor’s subcommand takes. A repository whose subcommand takes arguments of its own flattens this into its own Args struct.
Speak
Where a cell’s play button sends its value. A bundle substitutes the URL-encoded cell value for {value}, and lets a localStorage entry under storage_key override the origin.
ValidationError
A problem with one row of a table. field names the column at fault when the check is specific to one, and is null for a whole-row check.
ViewArgs
What a view was asked for.
ViewData
What one render of a view produced: a note about the whole of it, and its sections in the order they are to be read.

Enums§

ChipContent
What a map’s chips put before the value: the key’s label, or the key itself.
ColumnType
How the browser renders and edits one column.
Datalist
A completion list a column’s input draws on, in one of two forms: a fixed list the server computed, or one the browser computes live from the rows on screen.
Front
Where the editor opens when the address names nothing.
ServerCommand

Traits§

App
One repository’s editor: a name for the shell, the tables it serves, and the views it computes.
Table
The object-safe façade the router holds. Each method returns the JSON body of one endpoint.
TableLogic
One table’s per-repository logic.
View
The object-safe façade the router dispatches through, as crate::Table is for tables. A blanket implementation covers every ViewLogic, so nothing outside this module implements it.
ViewLogic
One repository’s view.

Functions§

probe
Ask a server on 127.0.0.1:port for path, returning its status code and body.
probe_status
The status code alone, for a caller that only wants to know whether a service is up and answering. None and 0 mean what they mean in probe.