Browse Source

feat: Action support both single and multi

zu1k 4 years ago
parent
commit
052562a123
3 changed files with 25 additions and 16 deletions
  1. 13 14
      rules/ads.yaml
  2. 8 1
      src/rule/file.rs
  3. 4 1
      src/rule/mod.rs

+ 13 - 14
rules/ads.yaml

@@ -2,31 +2,30 @@
   filter:
     url-regex: '(nfmovies)(?!.*?(\.css|\.js|\.jpeg|\.png|\.gif)).*'
   action:
-    - modify-response:
-        body:
-          origin: '<head>'
-          new: '<link rel="stylesheet" href="https://limbopro.com/CSS/nfmovies.css" type="text/css"><script type="text/javascript"  src="//limbopro.com/Adguard/nfmovies.js"></script></head>'
+    modify-response:
+      body:
+        origin: '<head>'
+        new: '<link rel="stylesheet" href="https://limbopro.com/CSS/nfmovies.css" type="text/css"><script type="text/javascript"  src="//limbopro.com/Adguard/nfmovies.js"></script></head>'
 
 - name: "低端影视去广告"
   filter:
     domain-prefix: 'ddrk.me'
   action:
-    - modify-response:
-        body:
-          origin: '<head>'
-          new: '<head><link rel="stylesheet" href="https://limbopro.com/CSS/ddrk.css" type="text/css"><script type="text/javascript" src="//limbopro.com/Adguard/ddrk.js"></script>'
+    modify-response:
+      body:
+        origin: '<head>'
+        new: '<head><link rel="stylesheet" href="https://limbopro.com/CSS/ddrk.css" type="text/css"><script type="text/javascript" src="//limbopro.com/Adguard/ddrk.js"></script>'
 
 - name: "www.pianku.li 片库网"
   filter:
     domain-keyword: 'pianku'
   action:
-    - modify-response:
-        body:
-          origin: '</body>'
-          new: '<link rel="stylesheet" href="https://limbopro.com/CSS/mypianku.css" type="text/css"><script type="text/javascript" src="//limbopro.com/Adguard/mypianku.js"></script></body>'
+    modify-response:
+      body:
+        origin: '</body>'
+        new: '<link rel="stylesheet" href="https://limbopro.com/CSS/mypianku.css" type="text/css"><script type="text/javascript" src="//limbopro.com/Adguard/mypianku.js"></script></body>'
 
 - name: "m.yhdm.io 樱花动漫"
   filter:
     url-regex: '^http:\/\/m\.yhdm\.io\/bar\/yfgg\.js'
-  action:
-    - reject
+  action: reject

+ 8 - 1
src/rule/file.rs

@@ -6,7 +6,14 @@ use std::{error::Error, fs::File, io::BufReader, path::Path};
 pub struct Rule {
     pub name: String,
     pub filter: Filter,
-    pub action: Vec<action::Action>,
+    pub action: Actions,
+}
+
+#[derive(Debug, Clone, Deserialize, Serialize)]
+#[serde(untagged)]
+pub enum Actions {
+    Action(action::Action),
+    MultiActions(Vec<action::Action>),
 }
 
 #[derive(Debug, Clone, Deserialize, Serialize)]

+ 4 - 1
src/rule/mod.rs

@@ -36,7 +36,10 @@ impl From<file::Rule> for Rule {
         };
         Self {
             filter,
-            action: rule.action,
+            action: match rule.action {
+                file::Actions::Action(action) => vec![action],
+                file::Actions::MultiActions(actions) => actions,
+            },
             url: None,
         }
     }