aboutsummaryrefslogtreecommitdiff
path: root/mling/src/proj_mgr
diff options
context:
space:
mode:
Diffstat (limited to 'mling/src/proj_mgr')
-rw-r--r--mling/src/proj_mgr/checklist_reader.rs35
-rw-r--r--mling/src/proj_mgr/generator.rs25
-rw-r--r--mling/src/proj_mgr/show_binaries.rs19
-rw-r--r--mling/src/proj_mgr/show_directories.rs21
4 files changed, 61 insertions, 39 deletions
diff --git a/mling/src/proj_mgr/checklist_reader.rs b/mling/src/proj_mgr/checklist_reader.rs
index 6d115bb..558d303 100644
--- a/mling/src/proj_mgr/checklist_reader.rs
+++ b/mling/src/proj_mgr/checklist_reader.rs
@@ -1,4 +1,4 @@
-use std::{collections::HashMap, path::Path, io};
+use std::{collections::HashMap, io, path::Path};
/// Reads and parses a `CHECKLIST.md` file, extracting both *values* (from
/// fenced code blocks) and *toggles* (from checkbox lines).
@@ -56,27 +56,28 @@ impl CheckListReader {
let line = lines[i];
if let Some(key) = line.strip_prefix("```").map(|s| s.trim())
- && !key.is_empty() && !key.starts_with(' ') {
- let mut block_lines = Vec::new();
+ && !key.is_empty()
+ && !key.starts_with(' ')
+ {
+ let mut block_lines = Vec::new();
+ i += 1;
+ while i < lines.len() && !lines[i].trim_start().starts_with("```") {
+ block_lines.push(lines[i]);
i += 1;
- while i < lines.len() && !lines[i].trim_start().starts_with("```") {
- block_lines.push(lines[i]);
- i += 1;
- }
- let value = block_lines
- .into_iter()
- .find(|l| !l.trim().is_empty())
- .map(|l| l.trim().to_string());
- if let Some(val) = value {
- self.values.insert(key.to_string(), val);
- }
- continue;
}
+ let value = block_lines
+ .into_iter()
+ .find(|l| !l.trim().is_empty())
+ .map(|l| l.trim().to_string());
+ if let Some(val) = value {
+ self.values.insert(key.to_string(), val);
+ }
+ continue;
+ }
if let Some(toggle_key) = Self::parse_toggle_line(line) {
let is_checked = line.contains("[x]") || line.contains("[X]");
- self.all_toggles
- .insert(toggle_key.clone(), is_checked);
+ self.all_toggles.insert(toggle_key.clone(), is_checked);
if is_checked {
self.toggles.insert(toggle_key, true);
}
diff --git a/mling/src/proj_mgr/generator.rs b/mling/src/proj_mgr/generator.rs
index 48a1753..f0dbdd7 100644
--- a/mling/src/proj_mgr/generator.rs
+++ b/mling/src/proj_mgr/generator.rs
@@ -1,9 +1,10 @@
use std::path::{self, PathBuf};
use mingling::{
- Groupped,
- macros::{chain, pack, r_println, renderer, route},
+ Grouped, RenderResult,
+ macros::{chain, pack, renderer, route},
};
+use std::io::Write as _;
use crate::{Next, proj_mgr::EntryGenerateProject, res::ResCurrentDir};
@@ -35,12 +36,22 @@ pub fn handle_state_gen_proj_ready(prev: StateGenerateProjectReady) -> Next {
}
#[renderer]
-pub fn render_gen_proj_checklist_created(result: ResultGenerateProjectChecklistCreated) {
- r_println!(
+pub fn render_gen_proj_checklist_created(
+ result: ResultGenerateProjectChecklistCreated,
+) -> RenderResult {
+ let mut res = RenderResult::default();
+ writeln!(
+ res,
"Successfully create {} at \"{}\"",
CHECK_LIST_NAME,
result.to_string_lossy()
- );
- r_println!("");
- r_println!("Please fill in {CHECK_LIST_NAME} and run `mling gen` again to continue generating");
+ )
+ .ok();
+ writeln!(res).ok();
+ writeln!(
+ res,
+ "Please fill in {CHECK_LIST_NAME} and run `mling gen` again to continue generating"
+ )
+ .ok();
+ res
}
diff --git a/mling/src/proj_mgr/show_binaries.rs b/mling/src/proj_mgr/show_binaries.rs
index d6872cf..4fb5c28 100644
--- a/mling/src/proj_mgr/show_binaries.rs
+++ b/mling/src/proj_mgr/show_binaries.rs
@@ -2,10 +2,11 @@ use std::path::PathBuf;
use colored::Colorize;
use mingling::{
- Groupped,
- macros::{chain, pack, r_print, r_println, renderer},
+ Grouped, RenderResult,
+ macros::{chain, pack, renderer},
};
use serde::Serialize;
+use std::io::Write as _;
use crate::{
Next,
@@ -16,7 +17,7 @@ use crate::{
res::ResManifestPath,
};
-#[derive(Serialize, Groupped)]
+#[derive(Serialize, Grouped)]
pub struct ResultBinaries {
pub binaries: Vec<DataBinary>,
}
@@ -58,16 +59,20 @@ pub fn handle_show_binaries(_args: EntryShowBinaries, manifest_path: &ResManifes
}
#[renderer]
-pub fn render_binaries(binaries: ResultBinaries) -> String {
- r_println!("{}", "Binaries:".bright_cyan().bold());
+pub fn render_binaries(binaries: ResultBinaries) -> RenderResult {
+ let mut result = RenderResult::default();
+ writeln!(result, "{}", "Binaries:".bright_cyan().bold()).ok();
if let Some(max_name_len) = binaries.binaries.iter().map(|b| b.name.len()).max() {
for binary in &binaries.binaries {
- r_println!(
+ writeln!(
+ result,
" {:width$} `{}`",
binary.name.bright_yellow().bold(),
binary.path.display().to_string().italic(),
width = max_name_len
- );
+ )
+ .ok();
}
}
+ result
}
diff --git a/mling/src/proj_mgr/show_directories.rs b/mling/src/proj_mgr/show_directories.rs
index e84bf69..5c5f448 100644
--- a/mling/src/proj_mgr/show_directories.rs
+++ b/mling/src/proj_mgr/show_directories.rs
@@ -1,9 +1,10 @@
use colored::Colorize;
use mingling::{
- Groupped,
- macros::{chain, pack, r_println, renderer},
+ Grouped, RenderResult,
+ macros::{chain, pack, renderer},
};
use serde::Serialize;
+use std::io::Write as _;
use crate::{
Next,
@@ -11,12 +12,12 @@ use crate::{
res::ResManifestPath,
};
-#[derive(Serialize, Groupped)]
+#[derive(Serialize, Grouped)]
pub struct ResultWorkspaceDirectory {
pub path: String,
}
-#[derive(Serialize, Groupped)]
+#[derive(Serialize, Grouped)]
pub struct ResultTargetDirectory {
pub path: String,
}
@@ -46,11 +47,15 @@ pub fn handle_show_target_directory(
}
#[renderer]
-pub fn render_workspace_directory(prev: ResultWorkspaceDirectory) {
- r_println!("{}", prev.path.bright_cyan().bold());
+pub fn render_workspace_directory(prev: ResultWorkspaceDirectory) -> RenderResult {
+ let mut result = RenderResult::default();
+ writeln!(result, "{}", prev.path.bright_cyan().bold()).ok();
+ result
}
#[renderer]
-pub fn render_target_directory(prev: ResultTargetDirectory) {
- r_println!("{}", prev.path.bright_cyan().bold());
+pub fn render_target_directory(prev: ResultTargetDirectory) -> RenderResult {
+ let mut result = RenderResult::default();
+ writeln!(result, "{}", prev.path.bright_cyan().bold()).ok();
+ result
}