write

Macro write 

Source
macro_rules! write {
    ($sc:ident, $( $v:expr ),* $(,)?) => { ... };
}
Expand description

Write various types into a StrConstrue

Convenience macro for using Display.

use construe::{StrConstrue, construe, write};

struct Task {
    done: bool,
    task: &'static str
}
const TASKS: &[Task] = &[
    Task {done: true, task: "write macro"},
    Task {done: false, task: "document macro"},
    Task {done: false, task: "test macro"}
];

/// Write to-do list
const fn list<const N: usize>(mut tasks: &[Task]) -> StrConstrue<N> {
    let mut strc = StrConstrue::new();
    write!(strc, tasks.len(), " tasks:\n");
    // no `for` in const
    while let [task, rest @ ..] = tasks {
        tasks = rest;
        write!(
            strc,
            if task.done {"[x]"} else {"[ ]"},
            " ",
            task.task,
            "\n"
        );
    }
    strc
}

construe!(const TODO_LIST: &str = list(TASKS));

let expected = "\
3 tasks:
[x] write macro
[ ] document macro
[ ] test macro
";
assert_eq!(TODO_LIST, expected);