lunka

Crates.iolunka
lib.rslunka
version0.10.0
sourcesrc
created_at2024-03-30 00:52:58.606587
updated_at2024-10-12 13:39:42.298549
descriptionPretty thin bindings to Lua 5.4
homepage
repositoryhttps://github.com/b0mbie/lunka
max_upload_size
id1190690
size185,692
[aka]bomb (b0mbie)

documentation

https://docs.rs/lunka

README

lunka

Pretty thin bindings to Lua 5.4.

This crate is still a work-in-progress, but is usable for projects.

Please check the latest documentation here: Documentation on docs.rs.

Examples

Creating a Lua "C" library:

use core::ffi::c_int;
use lunka::prelude::*;

unsafe extern "C" fn l_hello(l: *mut LuaState) -> c_int {
	// SAFETY: Caller ensures `l` is valid.
	let lua = unsafe { LuaThread::from_ptr(l) };

	// SAFETY: An error being raised will not skip any important pieces of code.
	let n = unsafe { lua.check_number(1) };

	// SAFETY: Ditto.
	unsafe { lua.push_string("Hello, world!") };
	lua.push_number(n * core::f64::consts::PI as LuaNumber);

	2
}

const LIBRARY: LuaLibrary<1> = lua_library! {
	hello: l_hello
};

#[export_name = "luaopen_hello"]
unsafe extern "C" fn luaopen_hello(l: *mut LuaState) -> c_int {
	// SAFETY: Caller ensures `l` is valid.
	let lua = unsafe { LuaThread::from_ptr(l) };

	// SAFETY: An error being raised will not skip any important pieces of code.
	unsafe { lua.new_lib(&LIBRARY) };

	1
}

For some more examples, check the examples directory in the crate's repository. They are comprehensive enough for actual usage.

Commit count: 126

cargo fmt