1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
//! Renderers for the tabnas transducer protocols.
//!
//! A renderer decides how a semantic protocol becomes text: `TableRows/1`
//! becomes CSV, `JsonEvents/1` becomes JSON, incrementally, through a
//! coalescing writer with a byte budget. Source interpretation never
//! crosses into this crate: a renderer sees labels and cells, never paths.
//!
//! - [`text`]: [`TextOut`], the fragment boundary every renderer writes
//! to; [`WriteOut`], which coalesces fragments to a byte budget, enforces
//! `max_output_bytes` and counts `output_bytes`; [`StringOut`] for tests
//! and small results; [`Join`] and [`ReplaceText`], the two text
//! combinators whose correctness depends on chunk boundaries, and
//! [`Concat`], a `Join` with no separator under the name the language
//! gives it.
//! - [`csv`]: [`CsvRenderer`], the always-quoted profile of `TableRows/1`,
//! with [`CsvOptions`] for the dialects.
//! - [`json`]: [`JsonRenderer`], `JsonEvents/1` as compact or indented
//! JSON text.
//! - [`records`]: [`RecordsToJson`], `TableRows/1` as `JsonEvents/1`, an
//! array of objects keyed by label.
//! - [`number`]: the JSON number grammar both renderers hold lexemes to.
//! - [`renderers`](mod@renderers): [`RenderRenderers`], this crate's
//! implementation of alchemy's `Renderers`, the interface a compiled
//! alchemy program makes its rendering stages through.
//!
//! The protocols, the text boundary [`TextOut`] and the renderers' options
//! are tabnas-alchemy's shared types (`tabnas_alchemy::shared`),
//! re-exported here at the paths they have always had. Every renderer
//! validates its protocol as it goes and reports the stable codes of
//! [`tabnas_alchemy::shared::Code`]; the output is flushed once, at the
//! protocol's end, and a failure found after text was written says so with
//! `committed_output`.
/// The README's Rust example runs as a doctest, so a stale one fails the
/// gate rather than misleading the reader.
pub use ;
pub use ;
pub use is_json_number;
pub use ;
pub use ;
pub use ;
/// This crate's version, as `Cargo.toml` declares it.
pub const VERSION: &str = env!;