Merge pull request #1470 from bytecodealliance/pch/wiggle_error_model
Wiggle: changes to traits used for error conversion and reporting
This commit is contained in:
@@ -8,6 +8,8 @@ mod types;
|
||||
use proc_macro2::TokenStream;
|
||||
use quote::quote;
|
||||
|
||||
use lifetimes::anon_lifetime;
|
||||
|
||||
pub use config::Config;
|
||||
pub use funcs::define_func;
|
||||
pub use module_trait::define_module_trait;
|
||||
@@ -21,6 +23,17 @@ pub fn generate(doc: &witx::Document, config: &Config) -> TokenStream {
|
||||
|
||||
let types = doc.typenames().map(|t| define_datatype(&names, &t));
|
||||
|
||||
let guest_error_methods = doc.error_types().map(|t| {
|
||||
let typename = names.type_ref(&t, anon_lifetime());
|
||||
let err_method = names.guest_error_conversion_method(&t);
|
||||
quote!(fn #err_method(&self, e: wiggle::GuestError) -> #typename;)
|
||||
});
|
||||
let guest_error_conversion = quote! {
|
||||
pub trait GuestErrorConversion {
|
||||
#(#guest_error_methods)*
|
||||
}
|
||||
};
|
||||
|
||||
let modules = doc.modules().map(|module| {
|
||||
let modname = names.module(&module.name);
|
||||
let trait_name = names.trait_name(&module.name);
|
||||
@@ -57,6 +70,7 @@ pub fn generate(doc: &witx::Document, config: &Config) -> TokenStream {
|
||||
quote!(
|
||||
pub mod types {
|
||||
#(#types)*
|
||||
#guest_error_conversion
|
||||
}
|
||||
#(#modules)*
|
||||
#metadata
|
||||
|
||||
Reference in New Issue
Block a user