Wasmtime bindings for Zig
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

58 lines
1.8 KiB

pub const ByteVec = Vec(u8, wasm_byte_vec_new_empty, wasm_byte_vec_new_uninitialized, wasm_byte_vec_new, wasm_byte_vec_copy, wasm_byte_vec_delete);
extern "c" fn wasm_byte_vec_new_empty(*anyopaque, usize) void;
extern "c" fn wasm_byte_vec_new_uninitialized(*anyopaque, usize) void;
extern "c" fn wasm_byte_vec_new(*anyopaque, usize, [*]const u8) void;
extern "c" fn wasm_byte_vec_copy(*anyopaque, *const anyopaque) void;
extern "c" fn wasm_byte_vec_delete(*anyopaque) void;
pub const Name = ByteVec;
pub const Message = ByteVec;
pub fn Vec(
comptime T: type,
comptime empty_fn: anytype,
comptime new_uninitialized_fn: anytype,
comptime new_fn: anytype,
comptime copy_fn: anytype,
comptime delete_fn: anytype,
) type {
return extern struct {
const Self = @This();
const name = @typeName(T);
size: usize,
data: [*]T,
pub fn initEmpty(size: usize) Self {
var result: Self = undefined;
@call(.auto, empty_fn, .{ &result, size });
return result;
}
pub fn initUninitialized(size: usize) Self {
var result: Self = undefined;
@call(.auto, new_uninitialized_fn, .{ &result, size });
return result;
}
pub fn initFromSlice(slice: []const T) Self {
var result: Self = undefined;
@call(.auto, new_fn, .{ &result, slice.len, slice.ptr });
return result;
}
pub fn copy(self: Self) Self {
var result: Self = undefined;
@call(.auto, copy_fn, .{ &result, &self });
return result;
}
pub fn deinit(self: Self) void {
@call(.auto, delete_fn, .{@constCast(&self)});
}
pub fn toSlice(self: Self) []const T {
return self.data[0..self.size];
}
};
}