Crate static_table
source ·Expand description
This library provides a macros to build a table at compile time.
It contains 2 macros:
Get started
static_table
use static_table::static_table;
const INTRO_TABLE: &str = static_table!([
["name", "designed by", "first release"],
["C", "Dennis Ritchie", "1972"],
["Go", "Rob Pike", "2009"],
["Rust", "Graydon Hoare", "2010"],
]);
assert_eq!(
INTRO_TABLE,
"+------+----------------+---------------+\n\
| name | designed by | first release |\n\
+------+----------------+---------------+\n\
| C | Dennis Ritchie | 1972 |\n\
+------+----------------+---------------+\n\
| Go | Rob Pike | 2009 |\n\
+------+----------------+---------------+\n\
| Rust | Graydon Hoare | 2010 |\n\
+------+----------------+---------------+"
);
pool_table
use static_table::pool_table;
const INTRO_TABLE: &str = pool_table!([
["name", "designed by", "first release"],
["C", "Dennis Ritchie", "1972"],
["Go", "Rob Pike", "2009"],
["Rust", "Graydon Hoare", "2010"],
]);
assert_eq!(
INTRO_TABLE,
"+------+-------------+---------------+\n\
| name | designed by | first release |\n\
+------+-------------+-----+---------+\n\
| C | Dennis Ritchie | 1972 |\n\
+------+--+---------------++---------+\n\
| Go | Rob Pike | 2009 |\n\
+---------+---------------+-+--------+\n\
| Rust | Graydon Hoare | 2010 |\n\
+---------+-----------------+--------+"
);
Configuration
Span
You can configure a span for a cell.
use static_table::static_table;
// see here we added a row with a span
let table = static_table!([
[{"programming languages"; 3}],
["name", "designed by", "first release"],
["C", "Dennis Ritchie", "1972"],
["Go", "Rob Pike", "2009"],
["Rust", "Graydon Hoare", "2010"],
]);
assert_eq!(
table,
"+---------------------------------------+\n\
| programming languages |\n\
+------+----------------+---------------+\n\
| name | designed by | first release |\n\
+------+----------------+---------------+\n\
| C | Dennis Ritchie | 1972 |\n\
+------+----------------+---------------+\n\
| Go | Rob Pike | 2009 |\n\
+------+----------------+---------------+\n\
| Rust | Graydon Hoare | 2010 |\n\
+------+----------------+---------------+"
);
// see here we added a column which is fully spanned
let table = static_table!([
[{"\n\nprogramming\nlanguages"}, "name", "designed by", "first release"],
[{}, "C", "Dennis Ritchie", "1972"],
[{}, "Go", "Rob Pike", "2009"],
[{}, "Rust", "Graydon Hoare", "2010"],
]);
assert_eq!(
table,
"+-------------+------+----------------+---------------+\n\
| | name | designed by | first release |\n\
| +------+----------------+---------------+\n\
| programming | C | Dennis Ritchie | 1972 |\n\
| languages +------+----------------+---------------+\n\
| | Go | Rob Pike | 2009 |\n\
| +------+----------------+---------------+\n\
| | Rust | Graydon Hoare | 2010 |\n\
+-------------+------+----------------+---------------+"
);
Settings
You can change a table table settings, such as THEME
, MARGIN
, PADDING
and ALIGNMENT
, by using a comma separated KEY=VALUE
pairs syntax.
use static_table::static_table;
const INTRO_TABLE: &str = static_table!(
[
["name", "designed by", "first release"],
["C", "Dennis Ritchie", "1972"],
["Go", "Rob Pike", "2009"],
["Rust", "Graydon Hoare", "2010"]
],
THEME = "EXTENDED",
ALIGNMENT = "RIGHT",
PADDING = "3, 0, 1, 0",
);
assert_eq!(
INTRO_TABLE,
"╔═══════╦═════════════════╦════════════════╗\n\
║ ║ ║ ║\n\
║ name║ designed by║ first release║\n\
╠═══════╬═════════════════╬════════════════╣\n\
║ ║ ║ ║\n\
║ C║ Dennis Ritchie║ 1972║\n\
╠═══════╬═════════════════╬════════════════╣\n\
║ ║ ║ ║\n\
║ Go║ Rob Pike║ 2009║\n\
╠═══════╬═════════════════╬════════════════╣\n\
║ ║ ║ ║\n\
║ Rust║ Graydon Hoare║ 2010║\n\
╚═══════╩═════════════════╩════════════════╝"
)
Macros
- Build a table.
- Build a table.