@@ -250,3 +250,61 @@ pub static _BASE64_MODULE: ModuleDef = {
250250pub 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