aboutsummaryrefslogtreecommitdiff
path: root/mling/src/project_solver.rs
diff options
context:
space:
mode:
authorWeicao-CatilGrass <1992414357@qq.com>2026-05-31 02:42:52 +0800
committer魏曹先生 <1992414357@qq.com>2026-05-31 17:19:20 +0800
commit2aa7bda3cb21ce6c052b82e08bcab79a625d04f2 (patch)
treef10b89007fc67ca1a948f34abe6869b49296b932 /mling/src/project_solver.rs
parent3aa409a55e4f2f0ab41b0949cc06eb13c2da4a43 (diff)
Enhance code quality across the entire codebase
Diffstat (limited to 'mling/src/project_solver.rs')
-rw-r--r--mling/src/project_solver.rs27
1 files changed, 18 insertions, 9 deletions
diff --git a/mling/src/project_solver.rs b/mling/src/project_solver.rs
index b6517b3..3aec2b4 100644
--- a/mling/src/project_solver.rs
+++ b/mling/src/project_solver.rs
@@ -17,13 +17,24 @@ pub struct BinaryItem {
pub path: PathBuf,
}
+/// Solves the current directory for project metadata.
+///
+/// # Errors
+///
+/// Returns an `io::Error` if the current directory cannot be determined
+/// or if `cargo metadata` fails.
pub fn solve_current_dir() -> Result<ProjectSolveResult, std::io::Error> {
let current = std::env::current_dir()?;
- solve(current)
+ solve(&current)
}
-pub fn solve(current: PathBuf) -> Result<ProjectSolveResult, std::io::Error> {
- let (target_dir, workspace_root, binaries) = solve_inner(&current)?;
+/// Solves the given directory path for project metadata.
+///
+/// # Errors
+///
+/// Returns an `io::Error` if `cargo metadata` fails for the given path.
+pub fn solve(current: &PathBuf) -> Result<ProjectSolveResult, std::io::Error> {
+ let (target_dir, workspace_root, binaries) = solve_inner(current)?;
Ok(ProjectSolveResult {
target_dir,
workspace_root,
@@ -40,9 +51,9 @@ fn solve_inner(current: &PathBuf) -> Result<(PathBuf, PathBuf, Vec<BinaryItem>),
.output()?;
if !output.status.success() {
let stderr = String::from_utf8_lossy(&output.stderr);
- return Err(std::io::Error::other(
- format!("cargo metadata failed: {}", stderr),
- ));
+ return Err(std::io::Error::other(format!(
+ "cargo metadata failed: {stderr}"
+ )));
}
let metadata: serde_json::Value = serde_json::from_slice(&output.stdout)
.map_err(|e| std::io::Error::new(std::io::ErrorKind::InvalidData, e))?;
@@ -75,9 +86,7 @@ fn solve_inner(current: &PathBuf) -> Result<(PathBuf, PathBuf, Vec<BinaryItem>),
if let Some(targets) = pkg["targets"].as_array() {
for target in targets {
let kind = target["kind"].as_array();
- let is_bin = kind
- .map(|k| k.iter().any(|v| v.as_str() == Some("bin")))
- .unwrap_or(false);
+ let is_bin = kind.is_some_and(|k| k.iter().any(|v| v.as_str() == Some("bin")));
if is_bin {
let name = target["name"].as_str().ok_or_else(|| {
std::io::Error::new(