mirror of
https://github.com/rust-lang/rustlings.git
synced 2026-11-12 23:45:57 +00:00
+9
-16
@@ -3,7 +3,6 @@ use crossterm::{
|
|||||||
QueueableCommand,
|
QueueableCommand,
|
||||||
style::{Attribute, Color, ResetColor, SetAttribute, SetForegroundColor},
|
style::{Attribute, Color, ResetColor, SetAttribute, SetForegroundColor},
|
||||||
};
|
};
|
||||||
use serde::Deserialize;
|
|
||||||
use std::{
|
use std::{
|
||||||
env::{current_dir, set_current_dir},
|
env::{current_dir, set_current_dir},
|
||||||
fs::{self, create_dir},
|
fs::{self, create_dir},
|
||||||
@@ -17,22 +16,17 @@ use crate::{
|
|||||||
info_file::InfoFile, term::press_enter_prompt,
|
info_file::InfoFile, term::press_enter_prompt,
|
||||||
};
|
};
|
||||||
|
|
||||||
#[derive(Deserialize)]
|
|
||||||
struct CargoLocateProject<'a> {
|
|
||||||
#[serde(borrow)]
|
|
||||||
root: &'a Path,
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn init() -> Result<()> {
|
pub fn init() -> Result<()> {
|
||||||
let rustlings_dir = Path::new("rustlings");
|
let rustlings_dir = Path::new("rustlings");
|
||||||
if rustlings_dir.exists() {
|
if rustlings_dir.exists() {
|
||||||
bail!(RUSTLINGS_DIR_ALREADY_EXISTS_ERR);
|
bail!(RUSTLINGS_DIR_ALREADY_EXISTS_ERR);
|
||||||
}
|
}
|
||||||
|
|
||||||
let locate_project_output = Command::new("cargo")
|
let mut locate_project_output = Command::new("cargo")
|
||||||
.arg("locate-project")
|
.arg("locate-project")
|
||||||
.arg("-q")
|
.arg("-q")
|
||||||
.arg("--workspace")
|
.arg("--workspace")
|
||||||
|
.arg("--message-format=plain")
|
||||||
.stdin(Stdio::null())
|
.stdin(Stdio::null())
|
||||||
.stderr(Stdio::null())
|
.stderr(Stdio::null())
|
||||||
.output()
|
.output()
|
||||||
@@ -66,15 +60,14 @@ pub fn init() -> Result<()> {
|
|||||||
bail!(IN_INITIALIZED_DIR_ERR);
|
bail!(IN_INITIALIZED_DIR_ERR);
|
||||||
}
|
}
|
||||||
|
|
||||||
let workspace_manifest =
|
// Remove newline
|
||||||
serde_json::de::from_slice::<CargoLocateProject>(&locate_project_output.stdout)
|
locate_project_output.stdout.pop();
|
||||||
.context(
|
|
||||||
"Failed to read the field `root` from the output of `cargo locate-project …`",
|
|
||||||
)?
|
|
||||||
.root;
|
|
||||||
|
|
||||||
let workspace_manifest_content = fs::read_to_string(workspace_manifest)
|
let workspace_manifest = String::try_from(locate_project_output.stdout)
|
||||||
.with_context(|| format!("Failed to read the file {}", workspace_manifest.display()))?;
|
.context("Failed to convert the output of `cargo locate-project …` to a string")?;
|
||||||
|
|
||||||
|
let workspace_manifest_content = fs::read_to_string(&workspace_manifest)
|
||||||
|
.with_context(|| format!("Failed to read the file {workspace_manifest}"))?;
|
||||||
if !workspace_manifest_content.contains("[workspace]")
|
if !workspace_manifest_content.contains("[workspace]")
|
||||||
&& !workspace_manifest_content.contains("workspace.")
|
&& !workspace_manifest_content.contains("workspace.")
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user