Skip to content

Commit fa86c3e

Browse files
authored
Merge pull request #52 from wasmx/module-error
Introduce ModuleError enum for errors
2 parents 5d3f564 + deeaa7f commit fa86c3e

File tree

7 files changed

+30
-24
lines changed

7 files changed

+30
-24
lines changed

libchisel/src/checkstartfunc.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use super::ModuleValidator;
1+
use super::{ModuleError, ModuleValidator};
22
use parity_wasm::elements::Module;
33

44
/// Struct on which ModuleValidator is implemented.
@@ -15,7 +15,7 @@ impl CheckStartFunc {
1515
}
1616

1717
impl ModuleValidator for CheckStartFunc {
18-
fn validate(&self, module: &Module) -> Result<bool, String> {
18+
fn validate(&self, module: &Module) -> Result<bool, ModuleError> {
1919
Ok(module.start_section().is_some() == self.start_required)
2020
}
2121
}

libchisel/src/deployer.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use super::ModuleCreator;
1+
use super::{ModuleCreator, ModuleError};
22
use parity_wasm::builder;
33
use parity_wasm::elements::{CustomSection, Module};
44

@@ -148,7 +148,7 @@ fn create_memory_deployer(payload: &[u8]) -> Module {
148148
}
149149

150150
impl<'a> ModuleCreator for Deployer<'a> {
151-
fn create(&self) -> Result<Module, String> {
151+
fn create(&self) -> Result<Module, ModuleError> {
152152
let output = match self {
153153
Deployer::Memory(payload) => create_memory_deployer(&payload),
154154
Deployer::CustomSection(payload) => create_custom_deployer(&payload),

libchisel/src/lib.rs

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11,22 +11,28 @@ pub mod trimexports;
1111
pub mod verifyexports;
1212
pub mod verifyimports;
1313

14+
#[derive(Eq, PartialEq, Debug)]
15+
pub enum ModuleError {
16+
NotSupported,
17+
Custom(String),
18+
}
19+
1420
pub trait ModuleCreator {
1521
/// Returns new module.
16-
fn create(&self) -> Result<Module, String>;
22+
fn create(&self) -> Result<Module, ModuleError>;
1723
}
1824

1925
pub trait ModuleTranslator {
20-
/// Translates module. Returns new module.
21-
fn translate(&self, module: &Module) -> Result<Module, String>;
26+
/// Translates module. Returns new module. Can fail with ModuleError::NotSupported.
27+
fn translate(&self, module: &Module) -> Result<Module, ModuleError>;
2228

23-
/// Translates module in-place. Returns true if the module was modified.
24-
fn translate_inplace(&self, module: &mut Module) -> Result<bool, String>;
29+
/// Translates module in-place. Returns true if the module was modified. Can fail with ModuleError::NotSupported.
30+
fn translate_inplace(&self, module: &mut Module) -> Result<bool, ModuleError>;
2531
}
2632

2733
pub trait ModuleValidator {
2834
/// Validates module. Returns true if it is valid or false if invalid.
29-
fn validate(&self, module: &Module) -> Result<bool, String>;
35+
fn validate(&self, module: &Module) -> Result<bool, ModuleError>;
3036
}
3137

3238
#[cfg(test)]
@@ -36,22 +42,22 @@ mod tests {
3642
struct SampleModule {}
3743

3844
impl ModuleCreator for SampleModule {
39-
fn create(&self) -> Result<Module, String> {
45+
fn create(&self) -> Result<Module, ModuleError> {
4046
Ok(Module::default())
4147
}
4248
}
4349

4450
impl ModuleTranslator for SampleModule {
45-
fn translate(&self, module: &Module) -> Result<Module, String> {
51+
fn translate(&self, module: &Module) -> Result<Module, ModuleError> {
4652
Ok(Module::default())
4753
}
48-
fn translate_inplace(&self, module: &mut Module) -> Result<bool, String> {
54+
fn translate_inplace(&self, module: &mut Module) -> Result<bool, ModuleError> {
4955
Ok((true))
5056
}
5157
}
5258

5359
impl ModuleValidator for SampleModule {
54-
fn validate(&self, module: &Module) -> Result<bool, String> {
60+
fn validate(&self, module: &Module) -> Result<bool, ModuleError> {
5561
Ok(true)
5662
}
5763
}

libchisel/src/remapimports.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use std::collections::HashMap;
22

3-
use super::ModuleTranslator;
3+
use super::{ModuleError, ModuleTranslator};
44
use parity_wasm::elements::*;
55

66
#[derive(Hash, Eq, PartialEq, Debug, Clone)]
@@ -204,11 +204,11 @@ impl RemapImports {
204204
}
205205

206206
impl ModuleTranslator for RemapImports {
207-
fn translate_inplace(&self, module: &mut Module) -> Result<bool, String> {
207+
fn translate_inplace(&self, module: &mut Module) -> Result<bool, ModuleError> {
208208
Ok(rename_imports(module, &self.translations))
209209
}
210210

211-
fn translate(&self, module: &Module) -> Result<Module, String> {
211+
fn translate(&self, module: &Module) -> Result<Module, ModuleError> {
212212
let mut ret = module.clone();
213213
rename_imports(&mut ret, &self.translations);
214214
Ok(ret)

libchisel/src/trimexports.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use super::ModuleTranslator;
1+
use super::{ModuleError, ModuleTranslator};
22
use parity_wasm::elements::*;
33

44
/// Struct containing a list of valid exports.
@@ -102,11 +102,11 @@ impl TrimExports {
102102
}
103103

104104
impl ModuleTranslator for TrimExports {
105-
fn translate_inplace(&self, module: &mut Module) -> Result<bool, String> {
105+
fn translate_inplace(&self, module: &mut Module) -> Result<bool, ModuleError> {
106106
Ok(self.trim_exports(module))
107107
}
108108

109-
fn translate(&self, module: &Module) -> Result<Module, String> {
109+
fn translate(&self, module: &Module) -> Result<Module, ModuleError> {
110110
let mut ret = module.clone();
111111
self.trim_exports(&mut ret);
112112
Ok(ret)

libchisel/src/verifyexports.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use super::ModuleValidator;
1+
use super::{ModuleError, ModuleValidator};
22
use parity_wasm::elements::{
33
ExportSection, External, FunctionSection, FunctionType, ImportSection, Internal, Module, Type,
44
};
@@ -38,7 +38,7 @@ impl<'a> VerifyExports<'a> {
3838
}
3939

4040
impl<'a> ModuleValidator for VerifyExports<'a> {
41-
fn validate(&self, module: &Module) -> Result<bool, String> {
41+
fn validate(&self, module: &Module) -> Result<bool, ModuleError> {
4242
// FIXME: This validating algorithm runs in O(n^2). Needs to be optimized
4343
let required_exports_not_found = self
4444
.entries

libchisel/src/verifyimports.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use super::ModuleValidator;
1+
use super::{ModuleError, ModuleValidator};
22
use parity_wasm::elements::{External, FunctionType, ImportSection, Module, Type, ValueType};
33

44
/// Enum representing a type of import and any extra data to check.
@@ -295,7 +295,7 @@ impl<'a> VerifyImports<'a> {
295295
}
296296

297297
impl<'a> ModuleValidator for VerifyImports<'a> {
298-
fn validate(&self, module: &Module) -> Result<bool, String> {
298+
fn validate(&self, module: &Module) -> Result<bool, ModuleError> {
299299
let import_section_len = if let Some(section) = module.import_section() {
300300
section.entries().len()
301301
} else {

0 commit comments

Comments
 (0)