Generalize SliceRef codegen to non-u8 element type
diff --git a/gen/src/write.rs b/gen/src/write.rs
index 0757146..1aa128f 100644
--- a/gen/src/write.rs
+++ b/gen/src/write.rs
@@ -167,10 +167,7 @@
Type::Str(_) => out.builtin.rust_str = true,
Type::CxxVector(_) => out.include.vector = true,
Type::Fn(_) => out.builtin.rust_fn = true,
- Type::SliceRef(_) => {
- out.include.cstdint = true;
- out.builtin.rust_slice = true;
- }
+ Type::SliceRef(_) => out.builtin.rust_slice = true,
Type::Array(_) => out.include.array = true,
Type::Ref(_) | Type::Void(_) => {}
}
@@ -481,7 +478,8 @@
if slice.mutability.is_none() {
write!(out, "const ");
}
- write!(out, "uint8_t *>({0}.ptr), {0}.len)", arg.ident);
+ write_type_space(out, &slice.inner);
+ write!(out, "*>({0}.ptr), {0}.len)", arg.ident);
} else if out.types.needs_indirect_abi(&arg.ty) {
out.include.utility = true;
write!(out, "::std::move(*{})", arg.ident);
@@ -891,12 +889,13 @@
Type::Str(_) => {
write!(out, "::rust::Str");
}
- Type::SliceRef(ty) => {
+ Type::SliceRef(slice) => {
write!(out, "::rust::Slice<");
- if ty.mutability.is_none() {
+ if slice.mutability.is_none() {
write!(out, "const ");
}
- write!(out, "uint8_t>");
+ write_type(out, &slice.inner);
+ write!(out, ">");
}
Type::Fn(f) => {
write!(out, "::rust::{}<", if f.throws { "TryFn" } else { "Fn" });