wiggle: revamp error type conversions

This commit is contained in:
Pat Hickey
2020-03-27 18:27:17 -07:00
parent 167a040ea5
commit 3e97e5f1ae
14 changed files with 76 additions and 24 deletions

View File

@@ -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;
@@ -19,6 +21,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 fs = module.funcs().map(|f| define_func(&names, &f));
@@ -52,6 +65,7 @@ pub fn generate(doc: &witx::Document, config: &Config) -> TokenStream {
quote!(
pub mod types {
#(#types)*
#guest_error_conversion
}
#(#modules)*
#metadata