wiggle: revamp error type conversions
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
use heck::{CamelCase, ShoutySnakeCase, SnakeCase};
|
||||
use proc_macro2::{Ident, TokenStream};
|
||||
use quote::{format_ident, quote};
|
||||
use witx::{AtomType, BuiltinType, Id, TypeRef};
|
||||
use witx::{AtomType, BuiltinType, Id, Type, TypeRef};
|
||||
|
||||
use crate::lifetimes::LifetimeExt;
|
||||
use crate::Config;
|
||||
@@ -61,12 +61,12 @@ impl Names {
|
||||
}
|
||||
}
|
||||
TypeRef::Value(ty) => match &**ty {
|
||||
witx::Type::Builtin(builtin) => self.builtin_type(*builtin, lifetime.clone()),
|
||||
witx::Type::Pointer(pointee) | witx::Type::ConstPointer(pointee) => {
|
||||
Type::Builtin(builtin) => self.builtin_type(*builtin, lifetime.clone()),
|
||||
Type::Pointer(pointee) | Type::ConstPointer(pointee) => {
|
||||
let pointee_type = self.type_ref(&pointee, lifetime.clone());
|
||||
quote!(wiggle::GuestPtr<#lifetime, #pointee_type>)
|
||||
}
|
||||
witx::Type::Array(pointee) => {
|
||||
Type::Array(pointee) => {
|
||||
let pointee_type = self.type_ref(&pointee, lifetime.clone());
|
||||
quote!(wiggle::GuestPtr<#lifetime, [#pointee_type]>)
|
||||
}
|
||||
@@ -141,4 +141,28 @@ impl Names {
|
||||
pub fn func_len_binding(&self, id: &Id) -> Ident {
|
||||
format_ident!("{}_len", id.as_str().to_snake_case())
|
||||
}
|
||||
|
||||
pub fn guest_error_conversion_method(&self, tref: &TypeRef) -> Ident {
|
||||
match tref {
|
||||
TypeRef::Name(nt) => format_ident!("into_{}", nt.name.as_str().to_snake_case()),
|
||||
TypeRef::Value(ty) => match &**ty {
|
||||
Type::Builtin(b) => match b {
|
||||
BuiltinType::String => unreachable!("error type must be atom"),
|
||||
BuiltinType::U8 => format_ident!("into_u8"),
|
||||
BuiltinType::U16 => format_ident!("into_u16"),
|
||||
BuiltinType::U32 => format_ident!("into_u32"),
|
||||
BuiltinType::U64 => format_ident!("into_u64"),
|
||||
BuiltinType::S8 => format_ident!("into_i8"),
|
||||
BuiltinType::S16 => format_ident!("into_i16"),
|
||||
BuiltinType::S32 => format_ident!("into_i32"),
|
||||
BuiltinType::S64 => format_ident!("into_i64"),
|
||||
BuiltinType::F32 => format_ident!("into_f32"),
|
||||
BuiltinType::F64 => format_ident!("into_f64"),
|
||||
BuiltinType::Char8 => format_ident!("into_char8"),
|
||||
BuiltinType::USize => format_ident!("into_usize"),
|
||||
},
|
||||
_ => panic!("unexpected anonymous error type: {:?}", ty),
|
||||
},
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user