- TODO implement feedback from https://www.reddit.com/r/rust/comments/eleleu/my_first_cli_in_rust_lsvine_list_contents_of/
- WONTDO: insert new-line in filenames > 50
- enh: drop useless variable table_isdir
- enh: factor out a struct Level1Dir to gather data. Instead of multiple Vec to track different features of a directory, just one Vec of the struct.
- enh: refactor `table1` to `level1_dirs`
- enh: skip empty dirs
- enh: refactor `l1` and `l2` to `level1_paths` and `level2_paths`
- enh: refactor `table2` to `level1_vine`
- enh: refactor `ncol` to `n_l2paths` and `nrow` to `n_l1dirs`
- feat: improve the final conversion of the Vec<Level1Dir> into a displayable Table by factoring out a TableBuf struct and impl
- feat: improve the first conversion Vec<Path> to Vec<Level1Dir> by by factoring out a `vecpath2vecl1dir` function
- feat: added tests
- enh: ran `cargo clippy` and integrated suggestions
- including iterator, no "return", increment, struct no dupe key-value name, single char for `starts_with`, redundant copy
- feat: split out code into multiple files
- based on https://doc.rust-lang.org/book/ch07-05-separating-modules-into-different-files.html
- feat: dropped unwrap usage and handling None and errors
- TODO ask about deep nesting of braces after removing unwrap (check `vecpath2vecl1dir`)
- also how to implement `vecpath2vecl1dir_asInheritedIterators.rs`
- TODO suggest improvements to multi-file chapter in https://github.com/rust-lang/book/issues/1760