Răsfoiți Sursa

feat: add `features` flag

YuKun Liu 3 ani în urmă
părinte
comite
d20e7ab508
3 a modificat fișierele cu 28 adăugiri și 1 ștergeri
  1. 12 0
      src/builder.rs
  2. 8 0
      src/cli/cfg.rs
  3. 8 1
      src/config.rs

+ 12 - 0
src/builder.rs

@@ -55,6 +55,12 @@ pub fn build(config: &CrateConfig) -> Result<()> {
         cmd.arg(custom_profile);
     }
 
+    if config.features.is_some() {
+        let features_str = config.features.as_ref().unwrap().join(" ");
+        cmd.arg("--features");
+        cmd.arg(features_str);
+    }
+
     match executable {
         ExecutableType::Binary(name) => cmd.arg("--bin").arg(name),
         ExecutableType::Lib(name) => cmd.arg("--lib").arg(name),
@@ -201,6 +207,12 @@ pub fn build_desktop(config: &CrateConfig, is_serve: bool) -> Result<()> {
         cmd.arg(custom_profile);
     }
 
+    if config.features.is_some() {
+        let features_str = config.features.as_ref().unwrap().join(" ");
+        cmd.arg("--features");
+        cmd.arg(features_str);
+    }
+
     match &config.executable {
         crate::ExecutableType::Binary(name) => cmd.arg("--bin").arg(name),
         crate::ExecutableType::Lib(name) => cmd.arg("--lib").arg(name),

+ 8 - 0
src/cli/cfg.rs

@@ -23,6 +23,10 @@ pub struct ConfigOptsBuild {
     /// Build platform: support Web & Desktop [default: "default_platform"]
     #[clap(long)]
     pub platform: Option<String>,
+
+    /// Space separated list of features to activate
+    #[clap(long)]
+    pub features: Option<Vec<String>>,
 }
 
 #[derive(Clone, Debug, Default, Deserialize, Parser)]
@@ -47,6 +51,10 @@ pub struct ConfigOptsServe {
     /// Build platform: support Web & Desktop [default: "default_platform"]
     #[clap(long)]
     pub platform: Option<String>,
+
+    /// Space separated list of features to activate
+    #[clap(long)]
+    pub features: Option<Vec<String>>,
 }
 
 /// Ensure the given value for `--public-url` is formatted correctly.

+ 8 - 1
src/config.rs

@@ -115,6 +115,7 @@ pub struct CrateConfig {
     pub dioxus_config: DioxusConfig,
     pub release: bool,
     pub custom_profile: Option<String>,
+    pub features: Option<Vec<String>>,
 }
 
 #[derive(Debug, Clone)]
@@ -163,8 +164,8 @@ impl CrateConfig {
         let executable = ExecutableType::Binary(output_filename);
 
         let release = false;
-
         let custom_profile = None;
+        let features = None;
 
         Ok(Self {
             out_dir,
@@ -177,6 +178,7 @@ impl CrateConfig {
             release,
             dioxus_config,
             custom_profile,
+            features
         })
     }
 
@@ -195,6 +197,11 @@ impl CrateConfig {
         self
     }
 
+    pub fn set_features(&mut self, features: Vec<String>) -> &mut Self {
+        self.features = Some(features);
+        self
+    }
+
     // pub fn with_build_options(&mut self, options: &BuildOptions) {
     //     if let Some(name) = &options.example {
     //         self.as_example(name.clone());