static_table

Crates.iostatic_table
lib.rsstatic_table
version0.5.0
sourcesrc
created_at2023-04-11 23:11:04.82959
updated_at2024-11-22 21:22:15.342927
descriptionLibrary creates pretty tables at compiler time
homepagehttps://github.com/zhiburt/tabled
repositoryhttps://github.com/zhiburt/tabled
max_upload_size
id836409
size90,744
Maxim Zhiburt (zhiburt)

documentation

https://docs.rs/static_table

README

(static_table) Cook tables at compiler time

The library provides a macros to build a pretty tables at compile time.

There's 2 types of tables you can build.

  1. Standard adjusted tables (static_table::static_table).
  2. Not adjusted, floating tables (static_table::pool_table).

To find a more features and settings which you can use with the macros please check out the documentation (docs.rs).

Get started

Add the library to your Cargo.toml.

# Cargo.toml
[dependencies]
static_table = "0.2"

An example of static_table usage.

Example Result
use static_table::static_table;

static LANG_LIST: &str = static_table!([
    ["name", "designed by", "first release"],
    ["C", "Dennis Ritchie", "1972"],
    ["Go", "Rob Pike", "2009"],
    ["Rust", "Graydon Hoare", "2010"],
    ["Hare", "Drew DeVault", "2022"],
]);

fn main() {
    println!("{LANG_LIST}")
}
+------+----------------+---------------+
| name | designed by    | first release |
+------+----------------+---------------+
| C    | Dennis Ritchie | 1972          |
+------+----------------+---------------+
| Go   | Rob Pike       | 2009          |
+------+----------------+---------------+
| Rust | Graydon Hoare  | 2010          |
+------+----------------+---------------+
| Hare | Drew DeVault   | 2022          |
+------+----------------+---------------+

An example of pool_table usage.

Example Result
use static_table::pool_table;

static LANG_LIST: &str = pool_table!([
    ["name", "designed by", "first release"],
    ["C", "Dennis Ritchie", "1972"],
    ["Go", "Rob Pike", "2009"],
    ["Rust", "Graydon Hoare", "2010"],
    ["Hare", "Drew DeVault", "2022"],
]);

fn main() {
    println!("{LANG_LIST}")
}
+------+-------------+---------------+
| name | designed by | first release |
+------+-------------+-----+---------+
| C    | Dennis Ritchie    | 1972    |
+------+--+---------------++---------+
| Go      | Rob Pike      | 2009     |
+---------+---------------+-+--------+
| Rust    | Graydon Hoare   | 2010   |
+---------+-----------------+--------+
| Hare    | Drew DeVault    | 2022   |
+---------+-----------------+--------+

You can even use the macros in the documentation

/// Add joins 2 integers together to get a sum.
/// 
/// ```
#[doc = static_table::static_table!([
    ["a", "b", "result"],
    ["1", '2', '3'],
    ["2", '2', '4']
])]
/// ```
pub fn add(left: usize, right: usize) -> usize {
    left + right
}

Binary size concern

It's something you shall be aware of. Using static_table MIGHT increase a binary size, because the table will be stored as actual symbols in a static section of a binary file (ELF, PE etc.).

I have run a few tests in this regard. And a binary which used static_table has SUBSTATIANALY smaller size than a binary with a build table at runtime using lazy_static/once_cell. I am not sure though why it is a case.

                debug mode      release mode
static_table    13497232        4501576
runtime table   12031120        4156024
Commit count: 1308

cargo fmt