Skip to content

Commit 8602691

Browse files
committed
WIP
1 parent e7fe182 commit 8602691

1 file changed

Lines changed: 58 additions & 0 deletions

File tree

Modules/_base64/src/lib.rs

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -250,3 +250,61 @@ pub static _BASE64_MODULE: ModuleDef = {
250250
pub extern "C" fn PyInit__base64() -> *mut PyObject {
251251
_BASE64_MODULE.init_multi_phase()
252252
}
253+
254+
use cpython_sys::*;
255+
use core::ffi::CStr;
256+
//use core::ffi::c_void;
257+
258+
pub const Py_MOD_MULTIPLE_INTERPRETERS_NOT_SUPPORTED: *mut core::ffi::c_void = 0 as *mut core::ffi::c_void;
259+
260+
pub enum PyModuleDefSlot {
261+
Name(&'static CStr),
262+
Doc(&'static CStr),
263+
MultipleInterpreters(*mut c_void),
264+
GIL(*mut c_void),
265+
StateSize(usize),
266+
}
267+
268+
pub struct PyModuleDefSlots<const N: usize>([PyModuleDef_Slot; N]);
269+
270+
impl<const N: usize> From<PyModuleDefSlots<N>> for [PyModuleDef_Slot; N] {
271+
fn from(value: PyModuleDefSlots<N>) -> Self {
272+
todo!()
273+
}
274+
}
275+
276+
impl<const N: usize> From<[PyModuleDefSlot; N]> for PyModuleDefSlots<N> {
277+
fn from(value: [PyModuleDefSlot; N]) -> Self {
278+
279+
}
280+
}
281+
282+
pub struct PyModule<const N: usize>(UnsafeCell<[PyModuleDef_Slot; N]>);
283+
284+
285+
impl<const N: usize> PyModule<N> {
286+
pub const fn new(slots: [PyModuleDefSlot; N]) -> Self {
287+
Self {
288+
0: UnsafeCell::new(slots.into())
289+
}
290+
}
291+
292+
pub fn as_mut_ptr(&'static self) -> *mut PyModuleDef_Slot {
293+
self.0.get() as *mut _
294+
}
295+
}
296+
297+
unsafe impl<const N: usize> Sync for PyModule<N> {}
298+
299+
static MODULE: PyModule<5> = PyModule::new([
300+
PyModuleDefSlot::Name(c"mymodule"),
301+
PyModuleDefSlot::Doc(c"An example module for a proof of concept"),
302+
( Py_mod_multiple_interpreters, Py_MOD_MULTIPLE_INTERPRETERS_NOT_SUPPORTED ),
303+
( Py_mod_gil, Py_MOD_GIL_NOT_USED ),
304+
( Py_mod_state_size, core::mem::size_of::<MyModuleState>() ),
305+
].into());
306+
307+
#[unsafe(no_mangle)]
308+
unsafe extern "C" fn PyModExport_mymodule() -> *mut PyModuleDef_Slot {
309+
MODULE.as_mut_ptr()
310+
}

0 commit comments

Comments
 (0)