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