Skip to main content

rustpython_vm/builtins/
capsule.rs

1use super::PyType;
2use crate::{Context, Py, PyPayload, PyResult, class::PyClassImpl, types::Representable};
3
4/// PyCapsule - a container for C pointers.
5/// In RustPython, this is a minimal implementation for compatibility.
6#[pyclass(module = false, name = "PyCapsule")]
7#[derive(Debug, Clone, Copy)]
8pub struct PyCapsule {
9    // Capsules store opaque pointers; we don't expose the actual pointer functionality
10    // since RustPython doesn't have the same C extension model as CPython.
11    _private: (),
12}
13
14impl PyPayload for PyCapsule {
15    #[inline]
16    fn class(ctx: &Context) -> &'static Py<PyType> {
17        ctx.types.capsule_type
18    }
19}
20
21#[pyclass(with(Representable), flags(DISALLOW_INSTANTIATION))]
22impl PyCapsule {}
23
24impl Representable for PyCapsule {
25    #[inline]
26    fn repr_str(_zelf: &Py<Self>, _vm: &crate::VirtualMachine) -> PyResult<String> {
27        Ok("<capsule object>".to_string())
28    }
29}
30
31pub fn init(context: &'static Context) {
32    PyCapsule::extend_class(context, context.types.capsule_type);
33}