44
55use 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
99use 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