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);