pyo3/conversions/std/
cell.rs

1use std::cell::Cell;
2
3use crate::{
4    conversion::IntoPyObject, types::any::PyAnyMethods, Bound, FromPyObject, PyAny, PyObject,
5    PyResult, Python,
6};
7
8#[allow(deprecated)]
9impl<T: Copy + crate::ToPyObject> crate::ToPyObject for Cell<T> {
10    fn to_object(&self, py: Python<'_>) -> PyObject {
11        self.get().to_object(py)
12    }
13}
14
15#[allow(deprecated)]
16impl<T: Copy + crate::IntoPy<PyObject>> crate::IntoPy<PyObject> for Cell<T> {
17    fn into_py(self, py: Python<'_>) -> PyObject {
18        self.get().into_py(py)
19    }
20}
21
22impl<'py, T: Copy + IntoPyObject<'py>> IntoPyObject<'py> for Cell<T> {
23    type Target = T::Target;
24    type Output = T::Output;
25    type Error = T::Error;
26
27    #[inline]
28    fn into_pyobject(self, py: Python<'py>) -> Result<Self::Output, Self::Error> {
29        self.get().into_pyobject(py)
30    }
31}
32
33impl<'py, T: Copy + IntoPyObject<'py>> IntoPyObject<'py> for &Cell<T> {
34    type Target = T::Target;
35    type Output = T::Output;
36    type Error = T::Error;
37
38    #[inline]
39    fn into_pyobject(self, py: Python<'py>) -> Result<Self::Output, Self::Error> {
40        self.get().into_pyobject(py)
41    }
42}
43
44impl<'py, T: FromPyObject<'py>> FromPyObject<'py> for Cell<T> {
45    fn extract_bound(ob: &Bound<'py, PyAny>) -> PyResult<Self> {
46        ob.extract().map(Cell::new)
47    }
48}