Skip to content

Commit af01583

Browse files
committed
optimize encode_script_with_permission
1 parent 1bf068d commit af01583

File tree

2 files changed

+15
-16
lines changed

2 files changed

+15
-16
lines changed

src/cosmetic_filter_cache_builder.rs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -171,24 +171,24 @@ impl CosmeticFilterCacheBuilder {
171171
.chain(rule.hostnames.unwrap_or_default())
172172
.chain(rule.entities.unwrap_or_default());
173173

174-
tokens_to_insert.for_each(|t| self.store_hostname_filter(&t, kind.clone()));
174+
tokens_to_insert.for_each(|t| self.store_hostname_filter(&t, &kind));
175175

176176
let tokens_to_insert_negated = std::iter::empty()
177177
.chain(rule.not_hostnames.unwrap_or_default())
178178
.chain(rule.not_entities.unwrap_or_default());
179179

180180
let negated = kind.negated();
181181

182-
tokens_to_insert_negated.for_each(|t| self.store_hostname_filter(&t, negated.clone()));
182+
tokens_to_insert_negated.for_each(|t| self.store_hostname_filter(&t, &negated));
183183
}
184184

185-
fn store_hostname_filter(&mut self, token: &Hash, kind: SpecificFilterType) {
185+
fn store_hostname_filter(&mut self, token: &Hash, kind: &SpecificFilterType) {
186186
use SpecificFilterType::*;
187187

188188
match kind {
189189
// Handle hide and inject_script at top level for better deduplication
190190
Hide(s) => {
191-
self.hostname_hide.insert(*token, s);
191+
self.hostname_hide.insert(*token, s.clone());
192192
}
193193
InjectScript((s, permission)) => {
194194
let encoded_script = encode_script_with_permission(s, permission);
@@ -197,19 +197,19 @@ impl CosmeticFilterCacheBuilder {
197197
// Handle remaining types through HostnameRule
198198
Unhide(s) => {
199199
let entry = self.specific_rules.entry(*token).or_default();
200-
entry.unhide.push(s);
200+
entry.unhide.push(s.clone());
201201
}
202202
UninjectScript((s, _)) => {
203203
let entry = self.specific_rules.entry(*token).or_default();
204-
entry.uninject_script.push(s);
204+
entry.uninject_script.push(s.clone());
205205
}
206206
ProceduralOrAction(s) => {
207207
let entry = self.specific_rules.entry(*token).or_default();
208-
entry.procedural_action.push(s);
208+
entry.procedural_action.push(s.clone());
209209
}
210210
ProceduralOrActionException(s) => {
211211
let entry = self.specific_rules.entry(*token).or_default();
212-
entry.procedural_action_exception.push(s);
212+
entry.procedural_action_exception.push(s.clone());
213213
}
214214
}
215215
}

src/cosmetic_filter_utils.rs

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -86,17 +86,16 @@ impl SpecificFilterType {
8686

8787
/// Encodes permission bits in the last 2 ascii chars of a script string
8888
/// Returns the script with permission appended
89-
pub(crate) fn encode_script_with_permission(
90-
mut script: String,
91-
permission: PermissionMask,
92-
) -> String {
89+
pub(crate) fn encode_script_with_permission(script: &str, permission: &PermissionMask) -> String {
9390
const HEX_CHARS: &[u8; 16] = b"0123456789abcdef";
9491
let high = (permission.to_bits() >> 4) as usize;
9592
let low = (permission.to_bits() & 0x0f) as usize;
9693

97-
script.push(HEX_CHARS[high] as char);
98-
script.push(HEX_CHARS[low] as char);
99-
script
94+
let mut encoded_script = String::with_capacity(script.len() + 2);
95+
encoded_script.push_str(script);
96+
encoded_script.push(HEX_CHARS[high] as char);
97+
encoded_script.push(HEX_CHARS[low] as char);
98+
encoded_script
10099
}
101100

102101
/// Decodes permission bits from the last 2 ascii chars of a script string
@@ -133,7 +132,7 @@ mod tests {
133132
let script = "console.log('测试 🚀 emoji')".to_string();
134133
let permission = PermissionMask::from_bits(permission);
135134

136-
let encoded = encode_script_with_permission(script.clone(), permission);
135+
let encoded = encode_script_with_permission(&script, &permission);
137136
let (decoded_permission, decoded_script) = decode_script_with_permission(&encoded);
138137

139138
assert_eq!(decoded_permission.to_bits(), permission.to_bits());

0 commit comments

Comments
 (0)