manifest.rs 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. use super::{app_paths::tauri_dir, config::ConfigHandle};
  2. use convert_case::{Case, Casing};
  3. use toml_edit::{Array, Document, Value};
  4. use std::fs::File;
  5. use std::io::{Read, Write};
  6. pub fn rewrite_manifest(config: ConfigHandle) -> crate::Result<()> {
  7. let manifest_path = tauri_dir().join("Cargo.toml");
  8. let mut manifest_str = String::new();
  9. let mut manifest_file = File::open(&manifest_path)?;
  10. manifest_file.read_to_string(&mut manifest_str)?;
  11. let mut manifest: Document = manifest_str.parse::<Document>()?;
  12. let dependencies = manifest
  13. .as_table_mut()
  14. .entry("dependencies")
  15. .as_table_mut()
  16. .expect("manifest dependencies isn't a table");
  17. let entry = dependencies.entry("tauri");
  18. let tauri = entry.as_value_mut();
  19. let config_guard = config.lock().unwrap();
  20. let config = config_guard.as_ref().unwrap();
  21. if let Some(tauri) = tauri {
  22. let mut features: Array = Default::default();
  23. let allowlist = &config.tauri.allowlist;
  24. if *allowlist.get("all").unwrap_or(&false) {
  25. features.push("all-api".to_string()).unwrap();
  26. } else {
  27. for (feature, enabled) in allowlist.iter() {
  28. if *enabled {
  29. features.push(feature.to_case(Case::Kebab)).unwrap();
  30. }
  31. }
  32. }
  33. if config.tauri.cli.is_some() {
  34. features.push("cli".to_string()).unwrap();
  35. }
  36. match tauri {
  37. Value::InlineTable(tauri_def) => {
  38. let manifest_features =
  39. tauri_def.get_or_insert("features", Value::Array(Default::default()));
  40. *manifest_features = Value::Array(features);
  41. }
  42. _ => {
  43. return Err(anyhow::anyhow!(
  44. "Unsupported tauri dependency format on Cargo.toml"
  45. ))
  46. }
  47. }
  48. let mut manifest_file = File::create(&manifest_path)?;
  49. manifest_file.write_all(
  50. manifest
  51. .to_string_in_original_order()
  52. .replace(r#"" ,features =["#, r#"", features = ["#)
  53. .as_bytes(),
  54. )?;
  55. manifest_file.flush()?;
  56. }
  57. Ok(())
  58. }