release_kit/commands/
forge.rs1use crate::cli::read::ReadArgs;
4use crate::commands::walk;
5use crate::embedded;
6use crate::error::RkError;
7use crate::output::Output;
8
9pub fn run(args: &ReadArgs) -> Result<(), RkError> {
16 let out = Output::human();
17 let entries = walk(&embedded::FORGES);
18 if args.list {
19 for (path, _) in &entries {
20 out.result_line(path.trim_end_matches(".md").to_ascii_lowercase());
21 }
22 return Ok(());
23 }
24 let Some(name) = args.name.as_deref() else {
25 return Err(RkError::Usage(
26 "name a forge, or pass --list to see them".into(),
27 ));
28 };
29 let wanted = name.to_ascii_lowercase();
30 let wanted = wanted.trim_end_matches(".md");
31 entries
32 .iter()
33 .find(|(path, _)| path.trim_end_matches(".md").eq_ignore_ascii_case(wanted))
34 .map_or_else(
35 || {
36 Err(RkError::NotFound {
37 kind: "forge",
38 name: name.to_owned(),
39 })
40 },
41 |(_, contents)| {
42 out.result_raw(&String::from_utf8_lossy(contents));
43 Ok(())
44 },
45 )
46}