diary_cli/
about.rs

1use soulog::*;
2use crate::{archive::Archive, unwrap_opt};
3
4macro_rules! log_attr {
5    ([$entry:ident, $logger:ident] $($name:ident$(($multi:expr))?),* $(,)?) => {$(
6        let _multi = true;
7        $(let _multi = $multi;)?
8        let attr = $entry.$name($logger.hollow());
9        if _multi {
10            log!(($logger.vital) $name("{attr:#?}\n") as Result);
11        } else {
12            log!(($logger.vital) $name("{attr:?}") as Result);
13        }
14    )*}
15}
16
17pub fn about(is_moc: bool, uid: String, logger: impl Logger) {
18    let archive = Archive::load(logger.hollow());
19
20    if is_moc {
21        about_moc(archive, uid, logger)
22    } else {
23        about_entry(archive, uid, logger)
24    }
25}
26
27fn about_entry(archive: Archive, uid: String, mut logger: impl Logger) {
28    let error_msg = format!("Entry of uid '{uid}' not found in archive");
29    let mut entry = unwrap_opt!((archive.get_entry(uid, logger.hollow())) with logger, format: About("{error_msg}"));
30    std::mem::drop(error_msg);
31
32    // Print the stuff
33    log!((logger) About(""));
34    log!((logger.vital) About("{}", colour_format![blue("# "), green("About Entry of uid `"), none(&entry.uid), green("`")]) as Log);
35    log_attr! {
36        [entry, logger]
37        date(false),
38        title(false),
39        description(false),
40        notes,
41        tags,
42    }
43}
44
45fn about_moc(archive: Archive, uid: String, mut logger: impl Logger) {
46    let error_msg = format!("MOC of uid '{uid}' not found in archive");
47    let mut moc = unwrap_opt!((archive.get_moc(uid, logger.hollow())) with logger, format: About("{error_msg}"));
48    std::mem::drop(error_msg);
49
50    // Print the stuff
51    log!((logger) About(""));
52    log!((logger.vital) About("{}", colour_format![blue("# "), green("About MOC of uid `"), none(&moc.uid), green("`")]) as Log);
53    log_attr! {
54        [moc, logger]
55        tags(false),
56        title(false),
57        description(false),
58        notes,
59    }
60}