feat: make initState report errors

gh-309
This commit is contained in:
robal
2023-03-14 08:47:23 +01:00
parent f4f7b72ac6
commit c915d53ce1
4 changed files with 23 additions and 6 deletions

View File

@@ -26,7 +26,7 @@ export abstract class AbstractContractHandler<State> implements HandlerApi<State
interactionData: InteractionData<Input>
): Promise<InteractionResult<State, Result>>;
abstract initState(state: State): void;
abstract initState(state: State);
abstract maybeCallStateConstructor(
initialState: State,

View File

@@ -45,7 +45,8 @@ export class JsHandlerApi<State> extends AbstractContractHandler<State> {
}
// eslint-disable-next-line
initState(state: State): void {}
initState(state: State) {
}
async maybeCallStateConstructor<Input>(
initialState: State,

View File

@@ -66,11 +66,15 @@ export class WasmHandlerApi<State> extends AbstractContractHandler<State> {
}
}
initState(state: State): void {
initState(state: State) {
switch (this.contractDefinition.srcWasmLang) {
case 'rust': {
this.wasmExports.initState(state);
break;
const ret = this.wasmExports.initState(state);
if (ret) {
throw new Error(ret);
} else {
return;
}
}
default: {
throw new Error(`Support for ${this.contractDefinition.srcWasmLang} not implemented yet.`);

View File

@@ -369,11 +369,22 @@ export const rustWasmImports = (swGlobal, wbindgenImports, wasmInstance, dtorVal
}
/**
* @param {any} state
* @returns {boolean}
*/
function initState(state) {
try {
wasmInstance.exports.initState(addBorrowedObject(state));
const retptr = wasmInstance.exports.__wbindgen_add_to_stack_pointer(-16);
wasmInstance.exports.initState(retptr, addBorrowedObject(state));
var r0 = getInt32Memory0()[retptr / 4 + 0];
var r1 = getInt32Memory0()[retptr / 4 + 1];
let v0;
if (r0 !== 0) {
v0 = getStringFromWasm0(r0, r1).slice();
wasmInstance.exports.__wbindgen_free(r0, r1 * 1);
}
return v0;
} finally {
wasmInstance.exports.__wbindgen_add_to_stack_pointer(16);
heap[stack_pointer++] = undefined;
}
};
@@ -770,6 +781,7 @@ export const rustWasmImports = (swGlobal, wbindgenImports, wasmInstance, dtorVal
const ret = arg0;
return addHeapObject(ret);
},
__wbindgen_jsval_loose_eq: function (arg0, arg1) {
const ret = getObject(arg0) == getObject(arg1);
_assertBoolean(ret);