#!/usr/bin/env runrs //! ```cargo //! [dependencies] //! rust_util = { version = "0.6" } //! ``` use std::fs; use rust_util::{failure_and_exit, opt_result, util_cmd, XResult}; fn main() -> XResult<()> { let readme_template_file = "README_template.md"; let readme_template = opt_result!(fs::read_to_string(readme_template_file), "Read {} failed: {}", readme_template_file); let output = util_cmd::run_command_or_exit("tree", &["-L", "2"]); if !output.status.success() { failure_and_exit!("Run tree -L 2 failed: {}", output.status); } let tree_output = String::from_utf8_lossy(&output.stdout).to_string(); let tree_output_lines = tree_output.lines(); let mut tree_lines = vec![]; let ignored_file_list = vec![ "LICENSE", "README.md", "README_template.md", "build_readme.js", ]; for ln in tree_output_lines { let ignored = ignored_file_list.iter().any(|f| ln.ends_with(f)); if !ignored { tree_lines.push(ln); } } let joined_tree_lines = tree_lines.join("\n"); let readme = readme_template.replace("$$TREE_L2$$", &joined_tree_lines); opt_result!(fs::write("README.md", readme), "Write README.md failed: {}"); Ok(()) }