Skip to main content

pyforge_ffi/
import.rs

1use crate::object::PyObject;
2use std::ffi::{c_char, c_int, c_long};
3
4extern_libpython! {
5    pub fn PyImport_GetMagicNumber() -> c_long;
6    pub fn PyImport_GetMagicTag() -> *const c_char;
7    pub fn PyImport_ExecCodeModule(name: *const c_char, co: *mut PyObject) -> *mut PyObject;
8    pub fn PyImport_ExecCodeModuleEx(
9        name: *const c_char,
10        co: *mut PyObject,
11        pathname: *const c_char,
12    ) -> *mut PyObject;
13    pub fn PyImport_ExecCodeModuleWithPathnames(
14        name: *const c_char,
15        co: *mut PyObject,
16        pathname: *const c_char,
17        cpathname: *const c_char,
18    ) -> *mut PyObject;
19    pub fn PyImport_ExecCodeModuleObject(
20        name: *mut PyObject,
21        co: *mut PyObject,
22        pathname: *mut PyObject,
23        cpathname: *mut PyObject,
24    ) -> *mut PyObject;
25    pub fn PyImport_GetModuleDict() -> *mut PyObject;
26    pub fn PyImport_GetModule(name: *mut PyObject) -> *mut PyObject;
27    pub fn PyImport_AddModuleObject(name: *mut PyObject) -> *mut PyObject;
28    pub fn PyImport_AddModule(name: *const c_char) -> *mut PyObject;
29    #[cfg(Py_3_13)]
30    pub fn PyImport_AddModuleRef(name: *const c_char) -> *mut PyObject;
31    pub fn PyImport_ImportModule(name: *const c_char) -> *mut PyObject;
32    #[deprecated(note = "Python 3.13")]
33    pub fn PyImport_ImportModuleNoBlock(name: *const c_char) -> *mut PyObject;
34    pub fn PyImport_ImportModuleLevel(
35        name: *const c_char,
36        globals: *mut PyObject,
37        locals: *mut PyObject,
38        fromlist: *mut PyObject,
39        level: c_int,
40    ) -> *mut PyObject;
41    pub fn PyImport_ImportModuleLevelObject(
42        name: *mut PyObject,
43        globals: *mut PyObject,
44        locals: *mut PyObject,
45        fromlist: *mut PyObject,
46        level: c_int,
47    ) -> *mut PyObject;
48}
49
50#[inline]
51pub unsafe fn PyImport_ImportModuleEx(
52    name: *const c_char,
53    globals: *mut PyObject,
54    locals: *mut PyObject,
55    fromlist: *mut PyObject,
56) -> *mut PyObject {
57    PyImport_ImportModuleLevel(name, globals, locals, fromlist, 0)
58}
59
60extern_libpython! {
61    pub fn PyImport_GetImporter(path: *mut PyObject) -> *mut PyObject;
62    pub fn PyImport_Import(name: *mut PyObject) -> *mut PyObject;
63    pub fn PyImport_ReloadModule(m: *mut PyObject) -> *mut PyObject;
64    pub fn PyImport_ImportFrozenModuleObject(name: *mut PyObject) -> c_int;
65    pub fn PyImport_ImportFrozenModule(name: *const c_char) -> c_int;
66
67    pub fn PyImport_AppendInittab(
68        name: *const c_char,
69        initfunc: Option<unsafe extern "C" fn() -> *mut PyObject>,
70    ) -> c_int;
71}