wiggle: new error configuration for generating a "trappable error" (#5276)
* Add a new "trappable" mode for wiggle to make an error type start refactoring how errors are generated and configured put a pin in this - you can now configure a generated error but i need to go fix Names Names is no longer a struct, rt is hardcoded to wiggle rest of fixes to pass tests its called a trappable error now don't generate UserErrorConversion trait if empty mention in macro docs * undo omitting the user error conversion trait when empty
This commit is contained in:
@@ -39,6 +39,10 @@ use syn::parse_macro_input;
|
||||
/// `{ errno => YourErrnoType }`. This allows you to use the `UserErrorConversion`
|
||||
/// trait to map these rich errors into the flat witx type, or to terminate
|
||||
/// WebAssembly execution by trapping.
|
||||
/// * Instead of requiring the user to define an error type, wiggle can
|
||||
/// generate an error type for the user which has conversions to/from
|
||||
/// the base type, and permits trapping, using the syntax
|
||||
/// `errno => trappable AnErrorType`.
|
||||
/// * Optional: `async` takes a set of witx modules and functions which are
|
||||
/// made Rust `async` functions in the module trait.
|
||||
///
|
||||
@@ -146,7 +150,6 @@ pub fn from_witx(args: TokenStream) -> TokenStream {
|
||||
let config = parse_macro_input!(args as wiggle_generate::Config);
|
||||
|
||||
let doc = config.load_document();
|
||||
let names = wiggle_generate::Names::new(quote!(wiggle));
|
||||
|
||||
let settings = wiggle_generate::CodegenSettings::new(
|
||||
&config.errors,
|
||||
@@ -157,9 +160,9 @@ pub fn from_witx(args: TokenStream) -> TokenStream {
|
||||
)
|
||||
.expect("validating codegen settings");
|
||||
|
||||
let code = wiggle_generate::generate(&doc, &names, &settings);
|
||||
let code = wiggle_generate::generate(&doc, &settings);
|
||||
let metadata = if cfg!(feature = "wiggle_metadata") {
|
||||
wiggle_generate::generate_metadata(&doc, &names)
|
||||
wiggle_generate::generate_metadata(&doc)
|
||||
} else {
|
||||
quote!()
|
||||
};
|
||||
@@ -188,7 +191,6 @@ pub fn async_trait(attr: TokenStream, item: TokenStream) -> TokenStream {
|
||||
pub fn wasmtime_integration(args: TokenStream) -> TokenStream {
|
||||
let config = parse_macro_input!(args as wiggle_generate::WasmtimeConfig);
|
||||
let doc = config.c.load_document();
|
||||
let names = wiggle_generate::Names::new(quote!(wiggle));
|
||||
|
||||
let settings = wiggle_generate::CodegenSettings::new(
|
||||
&config.c.errors,
|
||||
@@ -200,7 +202,7 @@ pub fn wasmtime_integration(args: TokenStream) -> TokenStream {
|
||||
.expect("validating codegen settings");
|
||||
|
||||
let modules = doc.modules().map(|module| {
|
||||
wiggle_generate::wasmtime::link_module(&module, &names, Some(&config.target), &settings)
|
||||
wiggle_generate::wasmtime::link_module(&module, Some(&config.target), &settings)
|
||||
});
|
||||
quote!( #(#modules)* ).into()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user