Skip to content

Commit a541821

Browse files
committed
Deserialise returns Result<...> now.
1 parent b8154aa commit a541821

File tree

7 files changed

+40
-24
lines changed

7 files changed

+40
-24
lines changed

benches/bench_serialization.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use criterion::*;
22

3-
use adblock::{Engine, EngineSerializer};
3+
use adblock::Engine;
44

55
#[path = "../tests/test_utils.rs"]
66
mod test_utils;

examples/deserialization.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use adblock::{request::Request, Engine, EngineSerializer};
1+
use adblock::{request::Request, Engine};
22

33
use serde::Deserialize;
44

examples/generate-dat.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use adblock::{request::Request, Engine, EngineSerializer};
1+
use adblock::{request::Request, Engine};
22

33
use std::fs::File;
44
use std::io::prelude::*;

examples/use-dat.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use adblock::{request::Request, Engine, EngineSerializer};
1+
use adblock::{request::Request, Engine};
22

33
use std::fs::File;
44
use std::io::prelude::*;

src/data_format/mod.rs

+15-2
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,13 @@ pub enum DeserializationError {
6767
/// crate. If you still need it for some reason, you can convert it using 0.7.x by
6868
/// deserializing and then reserializing it into the newer V0 format.
6969
LegacyFormatNoLongerSupported,
70+
InvalidFlatBuffer(flatbuffers::InvalidFlatbuffer),
71+
}
72+
73+
impl From<std::convert::Infallible> for DeserializationError {
74+
fn from(x: std::convert::Infallible) -> Self {
75+
match x {}
76+
}
7077
}
7178

7279
impl From<rmp_serde::decode::Error> for DeserializationError {
@@ -75,10 +82,16 @@ impl From<rmp_serde::decode::Error> for DeserializationError {
7582
}
7683
}
7784

85+
impl From<flatbuffers::InvalidFlatbuffer> for DeserializationError {
86+
fn from(e: flatbuffers::InvalidFlatbuffer) -> Self {
87+
Self::InvalidFlatBuffer(e)
88+
}
89+
}
90+
7891
impl DeserializeFormat {
79-
pub(crate) fn build(self) -> (Blocker, CosmeticFilterCache) {
92+
pub(crate) fn build(self) -> Result<(Blocker, CosmeticFilterCache), DeserializationError> {
8093
match self {
81-
Self::V0(v) => v.into(),
94+
Self::V0(v) => v.try_into(),
8295
}
8396
}
8497

src/data_format/v0.rs

+20-17
Original file line numberDiff line numberDiff line change
@@ -379,16 +379,17 @@ pub(crate) struct NetworkFilterListV0DeserializeFmt {
379379
pub unique_domains_hashes_map: HashMap<crate::utils::Hash, u16>,
380380
}
381381

382-
impl From<NetworkFilterListV0DeserializeFmt> for NetworkFilterList {
383-
fn from(v: NetworkFilterListV0DeserializeFmt) -> Self {
384-
let _ = fb::root_as_network_filter_list(&v.flatbuffer_memory)
385-
.expect("Flatbuffer is not corrupted");
386-
Self {
382+
impl TryFrom<NetworkFilterListV0DeserializeFmt> for NetworkFilterList {
383+
fn try_from(v: NetworkFilterListV0DeserializeFmt) -> Result<Self, Self::Error> {
384+
let _ = fb::root_as_network_filter_list(&v.flatbuffer_memory)?;
385+
Ok(Self {
387386
flatbuffer_memory: v.flatbuffer_memory,
388387
filter_map: v.filter_map,
389388
unique_domains_hashes_map: v.unique_domains_hashes_map,
390-
}
389+
})
391390
}
391+
392+
type Error = DeserializationError;
392393
}
393394

394395
/// Structural representation of adblock engine data that can be built up from deserialization and
@@ -471,25 +472,25 @@ impl<'a> From<(&'a Blocker, &'a CosmeticFilterCache)> for SerializeFormat<'a> {
471472
}
472473
}
473474

474-
impl From<DeserializeFormat> for (Blocker, CosmeticFilterCache) {
475-
fn from(v: DeserializeFormat) -> Self {
475+
impl TryFrom<DeserializeFormat> for (Blocker, CosmeticFilterCache) {
476+
fn try_from(v: DeserializeFormat) -> Result<Self, Self::Error> {
476477
use crate::cosmetic_filter_cache::HostnameFilterBin;
477478

478479
let mut specific_rules: HostnameRuleDb = v.specific_rules.into();
479480
specific_rules.procedural_action = HostnameFilterBin(v.procedural_action);
480481
specific_rules.procedural_action_exception =
481482
HostnameFilterBin(v.procedural_action_exception);
482483

483-
(
484+
Ok((
484485
Blocker {
485-
csp: v.csp.into(),
486-
exceptions: v.exceptions.into(),
487-
importants: v.importants.into(),
488-
redirects: v.redirects.into(),
486+
csp: v.csp.try_into()?,
487+
exceptions: v.exceptions.try_into()?,
488+
importants: v.importants.try_into()?,
489+
redirects: v.redirects.try_into()?,
489490
removeparam: NetworkFilterList::default(),
490-
filters_tagged: v.filters_tagged.into(),
491-
filters: v.filters.into(),
492-
generic_hide: v.generic_hide.into(),
491+
filters_tagged: v.filters_tagged.try_into()?,
492+
filters: v.filters.try_into()?,
493+
generic_hide: v.generic_hide.try_into()?,
493494

494495
tags_enabled: Default::default(),
495496
tagged_filters_all: v.tagged_filters_all.into_iter().map(|f| f.into()).collect(),
@@ -507,6 +508,8 @@ impl From<DeserializeFormat> for (Blocker, CosmeticFilterCache) {
507508

508509
misc_generic_selectors: v.misc_generic_selectors,
509510
},
510-
)
511+
))
511512
}
513+
514+
type Error = DeserializationError;
512515
}

src/engine.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -264,7 +264,7 @@ impl Engine {
264264
use crate::data_format::DeserializeFormat;
265265
let current_tags = self.blocker.tags_enabled();
266266
let deserialize_format = DeserializeFormat::deserialize(serialized)?;
267-
let (blocker, cosmetic_cache) = deserialize_format.build();
267+
let (blocker, cosmetic_cache) = deserialize_format.build()?;
268268
self.blocker = blocker;
269269
self.blocker
270270
.use_tags(&current_tags.iter().map(|s| &**s).collect::<Vec<_>>());

0 commit comments

Comments
 (0)