1const ZERO: &str =
2 " ____\u{20}
3 / __ \\
4 / / / /
5 / /_/ /\u{20}
6\\____/ ";
7
8fn wrap(s: &str) -> String {
9 let mut out = String::new();
10 let mut word = String::new();
11 let mut len = 0;
12
13 for c in s.chars() {
14 if c.is_whitespace() {
15 len += word.len() + 1;
16 out.extend(word.drain(..));
17 out.push(c);
18 } else {
19 word.push(c);
20 }
21
22 if len > 70 {
23 out.push('\n');
24 len = 0;
25 }
26 }
27
28 out.extend(word.chars());
29
30 out
31}
32
33fn center_lines(s: &str) -> String {
34 s.lines().map(|l| format!("|{:^78}|", l)).collect::<Vec<_>>().join("\n")
35}
36
37pub fn draw(s: &str) -> String {
38 format!(
39 r#"
40+------------------------------------------------------------------------------+
41| |
42|{:^78}|
43| |
44{}
45| |
46|{:^78}|
47| |
48{}
49| |
50+------------------------------------------------------------------------------+
51"#,
52 "It has been",
53 center_lines(ZERO),
54 "days",
55 center_lines(&wrap(&format!("since {}", s)))
56 )
57}