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 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 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}