playdate_rs/
lua.rs

1use alloc::{borrow::ToOwned, ffi::CString};
2
3use crate::error::Error;
4
5pub struct Lua {
6    #[allow(unused)]
7    handle: *const sys::playdate_lua,
8}
9
10impl Lua {
11    pub(crate) fn new(handle: *const sys::playdate_lua) -> Self {
12        Self { handle }
13    }
14
15    pub fn add_function(&self, f: sys::lua_CFunction, name: impl AsRef<str>) -> Result<(), Error> {
16        let c_string = CString::new(name.as_ref()).unwrap();
17        unsafe {
18            let mut err = core::ptr::null();
19            (*self.handle).addFunction.unwrap()(f, c_string.as_ptr(), &mut err);
20            if !err.is_null() {
21                let c_str = ::core::ffi::CStr::from_ptr(err);
22                let err_str = c_str.to_str().unwrap();
23                Err(Error::Lua(err_str.to_owned()))
24            } else {
25                Ok(())
26            }
27        }
28    }
29
30    // pub addFunction: ::core::option::Option<
31    //     unsafe extern "C" fn(
32    //         f: lua_CFunction,
33    //         name: *const ::core::ffi::c_char,
34    //         outErr: *mut *const ::core::ffi::c_char,
35    //     ) -> ::core::ffi::c_int,
36    // >,
37    // pub registerClass: ::core::option::Option<
38    //     unsafe extern "C" fn(
39    //         name: *const ::core::ffi::c_char,
40    //         reg: *const lua_reg,
41    //         vals: *const lua_val,
42    //         isstatic: ::core::ffi::c_int,
43    //         outErr: *mut *const ::core::ffi::c_char,
44    //     ) -> ::core::ffi::c_int,
45    // >,
46    // pub pushFunction: ::core::option::Option<unsafe extern "C" fn(f: lua_CFunction)>,
47    // pub indexMetatable: ::core::option::Option<unsafe extern "C" fn() -> ::core::ffi::c_int>,
48    // pub stop: ::core::option::Option<unsafe extern "C" fn()>,
49    // pub start: ::core::option::Option<unsafe extern "C" fn()>,
50    // pub getArgCount: ::core::option::Option<unsafe extern "C" fn() -> ::core::ffi::c_int>,
51    // pub getArgType: ::core::option::Option<
52    //     unsafe extern "C" fn(
53    //         pos: ::core::ffi::c_int,
54    //         outClass: *mut *const ::core::ffi::c_char,
55    //     ) -> LuaType,
56    // >,
57    // pub argIsNil:
58    //     ::core::option::Option<unsafe extern "C" fn(pos: ::core::ffi::c_int) -> ::core::ffi::c_int>,
59    // pub getArgBool:
60    //     ::core::option::Option<unsafe extern "C" fn(pos: ::core::ffi::c_int) -> ::core::ffi::c_int>,
61    // pub getArgInt:
62    //     ::core::option::Option<unsafe extern "C" fn(pos: ::core::ffi::c_int) -> ::core::ffi::c_int>,
63    // pub getArgFloat: ::core::option::Option<unsafe extern "C" fn(pos: ::core::ffi::c_int) -> f32>,
64    // pub getArgString: ::core::option::Option<
65    //     unsafe extern "C" fn(pos: ::core::ffi::c_int) -> *const ::core::ffi::c_char,
66    // >,
67    // pub getArgBytes: ::core::option::Option<
68    //     unsafe extern "C" fn(
69    //         pos: ::core::ffi::c_int,
70    //         outlen: *mut usize,
71    //     ) -> *const ::core::ffi::c_char,
72    // >,
73    // pub getArgObject: ::core::option::Option<
74    //     unsafe extern "C" fn(
75    //         pos: ::core::ffi::c_int,
76    //         type_: *mut ::core::ffi::c_char,
77    //         outud: *mut *mut LuaUDObject,
78    //     ) -> *mut ::core::ffi::c_void,
79    // >,
80    // pub getBitmap:
81    //     ::core::option::Option<unsafe extern "C" fn(pos: ::core::ffi::c_int) -> *mut LCDBitmap>,
82    // pub getSprite:
83    //     ::core::option::Option<unsafe extern "C" fn(pos: ::core::ffi::c_int) -> *mut LCDSprite>,
84    // pub pushNil: ::core::option::Option<unsafe extern "C" fn()>,
85    // pub pushBool: ::core::option::Option<unsafe extern "C" fn(val: ::core::ffi::c_int)>,
86    // pub pushInt: ::core::option::Option<unsafe extern "C" fn(val: ::core::ffi::c_int)>,
87    // pub pushFloat: ::core::option::Option<unsafe extern "C" fn(val: f32)>,
88    // pub pushString: ::core::option::Option<unsafe extern "C" fn(str_: *const ::core::ffi::c_char)>,
89    // pub pushBytes:
90    //     ::core::option::Option<unsafe extern "C" fn(str_: *const ::core::ffi::c_char, len: usize)>,
91    // pub pushBitmap: ::core::option::Option<unsafe extern "C" fn(bitmap: *mut LCDBitmap)>,
92    // pub pushSprite: ::core::option::Option<unsafe extern "C" fn(sprite: *mut LCDSprite)>,
93    // pub pushObject: ::core::option::Option<
94    //     unsafe extern "C" fn(
95    //         obj: *mut ::core::ffi::c_void,
96    //         type_: *mut ::core::ffi::c_char,
97    //         nValues: ::core::ffi::c_int,
98    //     ) -> *mut LuaUDObject,
99    // >,
100    // pub retainObject:
101    //     ::core::option::Option<unsafe extern "C" fn(obj: *mut LuaUDObject) -> *mut LuaUDObject>,
102    // pub releaseObject: ::core::option::Option<unsafe extern "C" fn(obj: *mut LuaUDObject)>,
103    // pub setUserValue: ::core::option::Option<
104    //     unsafe extern "C" fn(obj: *mut LuaUDObject, slot: ::core::ffi::c_uint),
105    // >,
106    // pub getUserValue: ::core::option::Option<
107    //     unsafe extern "C" fn(
108    //         obj: *mut LuaUDObject,
109    //         slot: ::core::ffi::c_uint,
110    //     ) -> ::core::ffi::c_int,
111    // >,
112    // pub callFunction_deprecated: ::core::option::Option<
113    //     unsafe extern "C" fn(name: *const ::core::ffi::c_char, nargs: ::core::ffi::c_int),
114    // >,
115    // pub callFunction: ::core::option::Option<
116    //     unsafe extern "C" fn(
117    //         name: *const ::core::ffi::c_char,
118    //         nargs: ::core::ffi::c_int,
119    //         outerr: *mut *const ::core::ffi::c_char,
120    //     ) -> ::core::ffi::c_int,
121    // >,
122}