12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- // Copyright 2019-2024 Tauri Programme within The Commons Conservancy
- // SPDX-License-Identifier: Apache-2.0
- // SPDX-License-Identifier: MIT
- //! Compile-time and runtime types for Tauri plugins.
- #[cfg(feature = "build")]
- pub use build::*;
- #[cfg(feature = "build")]
- mod build {
- use std::{
- env::vars_os,
- fs,
- path::{Path, PathBuf},
- };
- const GLOBAL_API_SCRIPT_PATH_KEY: &str = "GLOBAL_API_SCRIPT_PATH";
- /// Known file name of the file that contains an array with the path of all API scripts defined with [`define_global_api_script_path`].
- pub const GLOBAL_API_SCRIPT_FILE_LIST_PATH: &str = "__global-api-script.js";
- /// Defines the path to the global API script using Cargo instructions.
- pub fn define_global_api_script_path(path: PathBuf) {
- println!(
- "cargo:{GLOBAL_API_SCRIPT_PATH_KEY}={}",
- path
- .canonicalize()
- .expect("failed to canonicalize global API script path")
- .display()
- )
- }
- /// Collects the path of all the global API scripts defined with [`define_global_api_script_path`]
- /// and saves them to the out dir with filename [`GLOBAL_API_SCRIPT_FILE_LIST_PATH`].
- pub fn save_global_api_scripts_paths(out_dir: &Path) {
- let mut scripts = Vec::new();
- for (key, value) in vars_os() {
- let key = key.to_string_lossy();
- if key.starts_with("DEP_") && key.ends_with(GLOBAL_API_SCRIPT_PATH_KEY) {
- let script_path = PathBuf::from(value);
- scripts.push(script_path);
- }
- }
- fs::write(
- out_dir.join(GLOBAL_API_SCRIPT_FILE_LIST_PATH),
- serde_json::to_string(&scripts).expect("failed to serialize global API script paths"),
- )
- .expect("failed to write global API script");
- }
- /// Read global api scripts from [`GLOBAL_API_SCRIPT_FILE_LIST_PATH`]
- pub fn read_global_api_scripts(out_dir: &Path) -> Option<Vec<String>> {
- let global_scripts_path = out_dir.join(GLOBAL_API_SCRIPT_FILE_LIST_PATH);
- if !global_scripts_path.exists() {
- return None;
- }
- let global_scripts_str = fs::read_to_string(global_scripts_path)
- .expect("failed to read plugin global API script paths");
- let global_scripts = serde_json::from_str::<Vec<PathBuf>>(&global_scripts_str)
- .expect("failed to parse plugin global API script paths");
- Some(
- global_scripts
- .into_iter()
- .map(|p| {
- fs::read_to_string(&p).unwrap_or_else(|e| {
- panic!(
- "failed to read plugin global API script {}: {e}",
- p.display()
- )
- })
- })
- .collect(),
- )
- }
- }
|