فهرست منبع

feat: cargo format struct

YuKun Liu 3 سال پیش
والد
کامیت
5edcb9238c
2فایلهای تغییر یافته به همراه43 افزوده شده و 8 حذف شده
  1. 18 8
      src/builder.rs
  2. 25 0
      src/cargo.rs

+ 18 - 8
src/builder.rs

@@ -77,18 +77,28 @@ pub fn build(config: &CrateConfig, quiet: bool) -> Result<()> {
 
     let loading = loading::Loading::default();
     loading.text("Building");
-    let output = cmd.output()?;
-    for i in output.stdout.lines() {
-        // println!("{:?}", i);
+    let mut child = cmd.spawn()?;
+    let out = child.stdout.take().unwrap();
+    let mut out = std::io::BufReader::new(out);
+    let mut s = String::new();
+    let mut n = 0;
+    while let Ok(_) = out.read_line(&mut s) {
+        // 进程退出后结束循环
+        if let Ok(Some(_)) = child.try_wait() {
+            break;
+        }
+        println!("\n{}\n", s);
+        loading.text(format!("Building {}", n));
+        n += 1;
     }
     loading.success("OK");
     loading.end();
 
-    if !output.status.success() {
-        log::error!("Build failed!");
-        let reason = String::from_utf8_lossy(&output.stderr).to_string();
-        return Err(Error::BuildFailed(reason));
-    }
+    // if !output.status.success() {
+    //     log::error!("Build failed!");
+    //     let reason = String::from_utf8_lossy(&output.stderr).to_string();
+    //     return Err(Error::BuildFailed(reason));
+    // }
 
     // [2] Establish the output directory structure
     let bindgen_outdir = out_dir.join("assets").join("dioxus");

+ 25 - 0
src/cargo.rs

@@ -1,4 +1,6 @@
 //! Utilities for working with cargo and rust files
+use serde::Serialize;
+
 use crate::error::{Error, Result};
 use std::{
     env, fs,
@@ -90,3 +92,26 @@ impl Metadata {
         Err(Error::CargoError("InvalidOutput".to_string()))
     }
 }
+
+#[derive(Serialize, Debug, Clone)]
+pub struct CargoFormatInfo {
+    pub reason: CargoFormatReason,
+    #[serde(default)]
+    pub package_id: String,
+    #[serde(default)]
+    manifest_path: String,
+    #[serde(default)]
+    message: Option<serde_json::Value>
+}
+
+#[derive(Serialize, Debug, Clone)]
+pub enum CargoFormatReason {
+    #[serde(rename = "compiler-message")]
+    CompilerMessage,
+    #[serde(rename = "compiler-artifact")]
+    CompilerArtifact,
+    #[serde(rename = "build-script-executed")]
+    BuildScriptExecuted,
+    #[serde(rename = "build-finished")]
+    BuildFinished,
+}