summaryrefslogtreecommitdiff
path: root/ext/ffi/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'ext/ffi/lib.rs')
-rw-r--r--ext/ffi/lib.rs40
1 files changed, 10 insertions, 30 deletions
diff --git a/ext/ffi/lib.rs b/ext/ffi/lib.rs
index cfff59953..673f83472 100644
--- a/ext/ffi/lib.rs
+++ b/ext/ffi/lib.rs
@@ -75,12 +75,13 @@ impl DynamicLibraryResource {
) -> Result<(), AnyError> {
let fn_ptr = unsafe { self.lib.symbol::<*const c_void>(&symbol) }?;
let ptr = libffi::middle::CodePtr::from_ptr(fn_ptr as _);
- let parameter_types =
- foreign_fn.parameters.into_iter().map(NativeType::from);
- let result_type = NativeType::from(foreign_fn.result);
let cif = libffi::middle::Cif::new(
- parameter_types.clone().map(libffi::middle::Type::from),
- result_type.into(),
+ foreign_fn
+ .parameters
+ .clone()
+ .into_iter()
+ .map(libffi::middle::Type::from),
+ foreign_fn.result.into(),
);
self.symbols.insert(
@@ -88,8 +89,8 @@ impl DynamicLibraryResource {
Symbol {
cif,
ptr,
- parameter_types: parameter_types.collect(),
- result_type,
+ parameter_types: foreign_fn.parameters,
+ result_type: foreign_fn.result,
},
);
@@ -153,27 +154,6 @@ impl From<NativeType> for libffi::middle::Type {
}
}
-impl From<String> for NativeType {
- fn from(string: String) -> Self {
- match string.as_str() {
- "void" => NativeType::Void,
- "u8" => NativeType::U8,
- "i8" => NativeType::I8,
- "u16" => NativeType::U16,
- "i16" => NativeType::I16,
- "u32" => NativeType::U32,
- "i32" => NativeType::I32,
- "u64" => NativeType::U64,
- "i64" => NativeType::I64,
- "usize" => NativeType::USize,
- "isize" => NativeType::ISize,
- "f32" => NativeType::F32,
- "f64" => NativeType::F64,
- _ => unimplemented!(),
- }
- }
-}
-
#[repr(C)]
union NativeValue {
void_value: (),
@@ -279,8 +259,8 @@ fn value_as_f64(value: Value) -> f64 {
#[derive(Deserialize, Debug)]
struct ForeignFunction {
- parameters: Vec<String>,
- result: String,
+ parameters: Vec<NativeType>,
+ result: NativeType,
}
#[derive(Deserialize, Debug)]