refactor(build): use cargo_toml instead of toml_edit for perf [TRI-023]

This commit is contained in:
Lucas Nogueira 2021-10-25 11:50:38 -03:00
parent 63921fada4
commit 9b4c47c4f8
No known key found for this signature in database
GPG Key ID: 2714B66BCFB01F7F
2 changed files with 13 additions and 32 deletions

View File

@ -22,7 +22,7 @@ quote = { version = "1", optional = true }
tauri-codegen = { version = "1.0.0-beta.4", path = "../tauri-codegen", optional = true }
serde_json = "1.0"
tauri-utils = { version = "1.0.0-beta.0", path = "../tauri-utils", features = [ "build" ] }
toml_edit = "0.5"
cargo_toml = "0.10"
[target."cfg(windows)".dependencies]
winres = "0.1"

View File

@ -105,43 +105,23 @@ pub fn build() {
#[allow(unused_variables)]
pub fn try_build(attributes: Attributes) -> Result<()> {
use anyhow::anyhow;
use cargo_toml::{Dependency, Manifest};
use std::fs::read_to_string;
use tauri_utils::config::Config;
use toml_edit::{Document, Item, Table, Value};
println!("cargo:rerun-if-changed=tauri.conf.json");
println!("cargo:rerun-if-changed=src/Cargo.toml");
let config: Config = serde_json::from_str(&read_to_string("tauri.conf.json")?)?;
let mut features = Vec::new();
let mut manifest: Document = read_to_string("Cargo.toml")?.parse::<Document>()?;
let dependencies = manifest
.as_table_mut()
.entry("dependencies")
.or_insert(Item::Table(Table::new()))
.as_table_mut()
.expect("manifest dependencies isn't a table");
let tauri_item = dependencies.entry("tauri").or_insert(Item::None);
if let Some(tauri) = tauri_item.as_table_mut() {
if let Item::Value(Value::Array(f)) = tauri.entry("features").or_insert(Item::None) {
for feat in f.iter() {
if let Value::String(feature) = feat {
features.push(feature.value().to_string());
}
}
}
} else if let Some(Value::InlineTable(table)) = tauri_item.as_value_mut() {
if let Some(Value::Array(f)) = table.get("features") {
for feat in f.iter() {
if let Value::String(feature) = feat {
features.push(feature.value().to_string());
}
}
}
}
let mut manifest = Manifest::from_path("Cargo.toml")?;
if let Some(tauri) = manifest.dependencies.remove("tauri") {
let mut features = match tauri {
Dependency::Simple(_) => Vec::new(),
Dependency::Detailed(dep) => dep.features,
};
features.sort();
let expected_features = config.tauri.features();
if features != expected_features {
return Err(anyhow!("
@ -149,6 +129,7 @@ pub fn try_build(attributes: Attributes) -> Result<()> {
Please run `tauri dev` or `tauri build` or set it to {:?}.
", expected_features));
}
}
#[cfg(windows)]
{