Skip to content

Commit df8bdcf

Browse files
authored
feat(cli.rs): add support to string and table dependency, closes #1653 (#1654)
1 parent c3acbd6 commit df8bdcf

2 files changed

Lines changed: 48 additions & 27 deletions

File tree

.changes/support-dep-formats.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"cli.rs": patch
3+
---
4+
5+
Adds support to `tauri` dependency as string and table on `Cargo.toml`.

tooling/cli.rs/src/helpers/manifest.rs

Lines changed: 43 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
use super::{app_paths::tauri_dir, config::ConfigHandle};
66

7-
use toml_edit::{Array, Document, Value};
7+
use toml_edit::{Array, Document, InlineTable, Item, Value};
88

99
use std::{
1010
fs::File,
@@ -23,47 +23,63 @@ pub fn rewrite_manifest(config: ConfigHandle) -> crate::Result<()> {
2323
.as_table_mut()
2424
.expect("manifest dependencies isn't a table");
2525

26-
let entry = dependencies.entry("tauri");
27-
let tauri = entry.as_value_mut();
26+
let tauri_entry = dependencies.entry("tauri");
2827

2928
let config_guard = config.lock().unwrap();
3029
let config = config_guard.as_ref().unwrap();
3130

32-
if let Some(tauri) = tauri {
33-
let allowlist_features = config.tauri.features();
34-
let mut features = Array::default();
35-
for feature in allowlist_features {
36-
features.push(feature).unwrap();
37-
}
38-
if config.tauri.cli.is_some() {
39-
features.push("cli").unwrap();
40-
}
41-
if config.tauri.updater.active {
42-
features.push("updater").unwrap();
43-
}
31+
let allowlist_features = config.tauri.features();
32+
let mut features = Array::default();
33+
for feature in allowlist_features {
34+
features.push(feature).unwrap();
35+
}
36+
if config.tauri.cli.is_some() {
37+
features.push("cli").unwrap();
38+
}
39+
if config.tauri.updater.active {
40+
features.push("updater").unwrap();
41+
}
4442

43+
if let Some(tauri) = tauri_entry.as_table_mut() {
44+
let manifest_features = tauri.entry("features");
45+
*manifest_features = Item::Value(Value::Array(features));
46+
} else if let Some(tauri) = tauri_entry.as_value_mut() {
4547
match tauri {
46-
Value::InlineTable(tauri_def) => {
47-
let manifest_features =
48-
tauri_def.get_or_insert("features", Value::Array(Default::default()));
48+
Value::InlineTable(table) => {
49+
let manifest_features = table.get_or_insert("features", Value::Array(Default::default()));
4950
*manifest_features = Value::Array(features);
5051
}
52+
Value::String(version) => {
53+
let mut def = InlineTable::default();
54+
def.get_or_insert(
55+
"version",
56+
version.to_string().replace("\"", "").replace(" ", ""),
57+
);
58+
def.get_or_insert("features", Value::Array(features));
59+
*tauri = Value::InlineTable(def);
60+
}
5161
_ => {
5262
return Err(anyhow::anyhow!(
5363
"Unsupported tauri dependency format on Cargo.toml"
5464
))
5565
}
5666
}
57-
58-
let mut manifest_file = File::create(&manifest_path)?;
59-
manifest_file.write_all(
60-
manifest
61-
.to_string_in_original_order()
62-
.replace(r#"" ,features =["#, r#"", features = ["#)
63-
.as_bytes(),
64-
)?;
65-
manifest_file.flush()?;
67+
} else {
68+
return Ok(());
6669
}
6770

71+
let mut manifest_file = File::create(&manifest_path)?;
72+
manifest_file.write_all(
73+
manifest
74+
.to_string_in_original_order()
75+
// apply some formatting fixes
76+
.replace(r#"" ,features =["#, r#"", features = ["#)
77+
.replace("]}", "] }")
78+
.replace("={", "= {")
79+
.replace("=[", "= [")
80+
.as_bytes(),
81+
)?;
82+
manifest_file.flush()?;
83+
6884
Ok(())
6985
}

0 commit comments

Comments
 (0)