mirror of
https://github.com/fluencelabs/wasm-bindgen
synced 2025-06-28 04:01:33 +00:00
Allow returning Result
from functions
This commit adds support for exporting a function defined in Rust that returns a `Result`, translating the `Ok` variant to the actual return value and the `Err` variant to an exception that's thrown in JS. The support for return types and descriptors was rejiggered a bit to be a bit more abstract and more well suited for this purpose. We no longer distinguish between functions with a return value and those without a return value. Additionally a new trait, `ReturnWasmAbi`, is used for converting return values. This trait is an internal implementation detail, however, and shouldn't surface itself to users much (if at all). Closes #841
This commit is contained in:
@ -34,6 +34,7 @@ tys! {
|
||||
RUST_STRUCT
|
||||
CHAR
|
||||
OPTIONAL
|
||||
UNIT
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
@ -61,12 +62,13 @@ pub enum Descriptor {
|
||||
RustStruct(String),
|
||||
Char,
|
||||
Option(Box<Descriptor>),
|
||||
Unit,
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
pub struct Function {
|
||||
pub arguments: Vec<Descriptor>,
|
||||
pub ret: Option<Descriptor>,
|
||||
pub ret: Descriptor,
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
@ -128,6 +130,7 @@ impl Descriptor {
|
||||
Descriptor::RustStruct(name)
|
||||
}
|
||||
CHAR => Descriptor::Char,
|
||||
UNIT => Descriptor::Unit,
|
||||
other => panic!("unknown descriptor: {}", other),
|
||||
}
|
||||
}
|
||||
@ -295,12 +298,10 @@ impl Function {
|
||||
let arguments = (0..get(data))
|
||||
.map(|_| Descriptor::_decode(data))
|
||||
.collect::<Vec<_>>();
|
||||
let ret = if get(data) == 0 {
|
||||
None
|
||||
} else {
|
||||
Some(Descriptor::_decode(data))
|
||||
};
|
||||
Function { arguments, ret }
|
||||
Function {
|
||||
arguments,
|
||||
ret: Descriptor::_decode(data),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user