Browse Source

allow the app capability json to contain an array

Lucas Nogueira 2 years ago
parent
commit
41961e7de0
3 changed files with 26 additions and 5 deletions
  1. 20 3
      core/tauri-build/src/lib.rs
  2. 4 1
      core/tauri-utils/src/plugin.rs
  3. 2 1
      examples/api/src-tauri/build.rs

+ 20 - 3
core/tauri-build/src/lib.rs

@@ -21,7 +21,7 @@ use serde::Deserialize;
 use tauri_utils::{
   config::Config,
   namespace::{MemberResolution, NamespaceLockFile},
-  plugin::Capability,
+  plugin::{Capability, CapabilityOrList},
   resources::{external_binaries, resource_relpath, ResourcePaths},
 };
 
@@ -252,9 +252,18 @@ impl Attributes {
 
   /// Appends a capability JSON. See [`Capability`].
   #[must_use]
-  pub fn capability(mut self, capability: impl AsRef<str>) -> Self {
-    let capability: Capability =
+  pub fn capability_json(self, capability: impl AsRef<str>) -> Self {
+    let capability: CapabilityOrList =
       serde_json::from_str(capability.as_ref()).expect("failed to deserialize capability");
+    match capability {
+      CapabilityOrList::Single(capability) => self.capability(capability),
+      CapabilityOrList::List(l) => self.capabilities(l),
+    }
+  }
+
+  /// Appends a [`Capability`].
+  #[must_use]
+  pub fn capability(mut self, capability: Capability) -> Self {
     assert!(
       !capability.id.is_empty(),
       "capability must have an identifier"
@@ -262,6 +271,14 @@ impl Attributes {
     self.capabilities.push(capability);
     self
   }
+
+  /// Appends the given list of capabilities. See [`Self::capability`].
+  pub fn capabilities<I: IntoIterator<Item = Capability>>(mut self, capabilities: I) -> Self {
+    for capability in capabilities {
+      self = self.capability(capability);
+    }
+    self
+  }
 }
 
 /// Run all build time helpers for your Tauri Application.

+ 4 - 1
core/tauri-utils/src/plugin.rs

@@ -53,10 +53,13 @@ pub struct Capability {
   pub scope: CapabilityScope,
 }
 
+/// An enum used to do serde operations with a list or a single capability.
 #[derive(Serialize, Deserialize)]
 #[serde(untagged)]
-enum CapabilityOrList {
+pub enum CapabilityOrList {
+  /// A single capability.
   Single(Capability),
+  /// A list of capabilities.
   List(Vec<Capability>),
 }
 

+ 2 - 1
examples/api/src-tauri/build.rs

@@ -4,7 +4,8 @@
 
 fn main() {
   tauri_build::try_build(
-    tauri_build::Attributes::new().capability(include_str!("./capabilities/allow-commands.json")),
+    tauri_build::Attributes::new()
+      .capability_json(include_str!("./capabilities/allow-commands.json")),
   )
   .expect("failed to run tauri-build");