diff --git a/cases/subinvoke/01-subinvoke/implementations/as/index.ts b/cases/subinvoke/01-subinvoke/implementations/as/index.ts index 7fcaa8a..27e7c9e 100644 --- a/cases/subinvoke/01-subinvoke/implementations/as/index.ts +++ b/cases/subinvoke/01-subinvoke/implementations/as/index.ts @@ -1,13 +1,18 @@ import { Args_addAndIncrement, Args_subinvokeThrowError, + Args_subinvokeMethodNotFound, + Args_subinvokeArgsIncorrect, ImportedSubinvoke_Module, ModuleBase } from "./wrap"; import { Args_add as ImportedArgs_add, - Args_invokeThrowError + Args_invokeThrowError, + serializeaddArgs, + serializeinvokeThrowErrorArgs } from "./wrap/imported/ImportedSubinvoke_Module/serialization"; +import { wrap_subinvoke } from "@polywrap/wasm-as"; export class Module extends ModuleBase { addAndIncrement(args: Args_addAndIncrement): i32 { @@ -24,4 +29,24 @@ export class Module extends ModuleBase { } return ImportedSubinvoke_Module.invokeThrowError(importedArgs_throwError).unwrap(); } + + subinvokeMethodNotFound(_: Args_subinvokeMethodNotFound): boolean { + const argsAdd: ImportedArgs_add = { a: 1, b: 1 }; + const argsBuf: ArrayBuffer = serializeaddArgs(argsAdd); + const result = wrap_subinvoke("authority/imported-subinvoke", "methodNotFound", argsBuf); + if (result.isErr) { + throw new Error(result.unwrapErr()); + } + return true; + } + + subinvokeArgsIncorrect(_: Args_subinvokeArgsIncorrect): boolean { + const wrongArgs: Args_invokeThrowError = { error: "Oops!" } + const argsBuf: ArrayBuffer = serializeinvokeThrowErrorArgs(wrongArgs); + const result = wrap_subinvoke("authority/imported-subinvoke", "add", argsBuf); + if (result.isErr) { + throw new Error(result.unwrapErr()); + } + return true; + } } diff --git a/cases/subinvoke/01-subinvoke/implementations/rs/lib.rs b/cases/subinvoke/01-subinvoke/implementations/rs/lib.rs index 7c5fdf9..5fd6cca 100644 --- a/cases/subinvoke/01-subinvoke/implementations/rs/lib.rs +++ b/cases/subinvoke/01-subinvoke/implementations/rs/lib.rs @@ -1,6 +1,8 @@ pub mod wrap; -use imported::imported_subinvoke_module::ArgsAdd; +use imported::imported_subinvoke_module::{ArgsAdd, ArgsInvokeThrowError}; pub use wrap::*; +use polywrap_msgpack_serde::to_vec; +use polywrap_wasm_rs::subinvoke::wrap_subinvoke; impl ModuleTrait for Module { fn add_and_increment(args: ArgsAddAndIncrement) -> Result { @@ -14,8 +16,28 @@ impl ModuleTrait for Module { fn subinvoke_throw_error(args: ArgsSubinvokeThrowError) -> Result { Ok(ImportedSubinvokeModule::invoke_throw_error( - &imported::imported_subinvoke_module::ArgsInvokeThrowError { error: args.error }, + &ArgsInvokeThrowError { error: args.error }, ) .unwrap()) } + + fn subinvoke_method_not_found(_: ArgsSubinvokeMethodNotFound) -> Result { + let args_add: ArgsAdd = ArgsAdd { a: 1, b: 1 }; + let args_buf = to_vec(&args_add).map_err(|e| e.to_string())?; + let result = wrap_subinvoke("authority/imported-subinvoke", "methodNotFound", args_buf); + if result.is_err() { + return Err(result.unwrap_err()); + } + Ok(true) + } + + fn subinvoke_args_incorrect(_: ArgsSubinvokeArgsIncorrect) -> Result { + let wrong_args: ArgsInvokeThrowError = ArgsInvokeThrowError { error: "Oops!".to_string() }; + let args_buf = to_vec(&wrong_args).map_err(|e| e.to_string())?; + let result = wrap_subinvoke("authority/imported-subinvoke", "add", args_buf); + if result.is_err() { + return Err(result.unwrap_err()); + } + Ok(true) + } } diff --git a/cases/subinvoke/01-subinvoke/schema.graphql b/cases/subinvoke/01-subinvoke/schema.graphql index 998b08d..c53de81 100644 --- a/cases/subinvoke/01-subinvoke/schema.graphql +++ b/cases/subinvoke/01-subinvoke/schema.graphql @@ -3,4 +3,6 @@ type Module { addAndIncrement(a: Int!, b: Int!): Int! subinvokeThrowError(error: String!): Boolean! + subinvokeMethodNotFound: Boolean! + subinvokeArgsIncorrect: Boolean! } diff --git a/cases/subinvoke/validator.cue b/cases/subinvoke/validator.cue index 8d3a789..6361cba 100644 --- a/cases/subinvoke/validator.cue +++ b/cases/subinvoke/validator.cue @@ -13,3 +13,13 @@ error: string } } +"subinvokeMethodNotFound": { + $0: { + error: string + } +} +"subinvokeArgsIncorrect": { + $0: { + error: string + } +} diff --git a/cases/subinvoke/workflow.json b/cases/subinvoke/workflow.json index a8fc135..24e7345 100644 --- a/cases/subinvoke/workflow.json +++ b/cases/subinvoke/workflow.json @@ -35,6 +35,24 @@ } } ] + }, + "subinvokeMethodNotFound": { + "steps": [ + { + "uri": "wrap://fs/./build", + "method": "subinvokeMethodNotFound", + "args": {} + } + ] + }, + "subinvokeArgsIncorrect": { + "steps": [ + { + "uri": "wrap://fs/./build", + "method": "subinvokeArgsIncorrect", + "args": {} + } + ] } } } \ No newline at end of file