pyo3_object_store/
memory.rs

1use std::sync::Arc;
2
3use object_store::memory::InMemory;
4use pyo3::intern;
5use pyo3::prelude::*;
6use pyo3::types::PyString;
7
8/// A Python-facing wrapper around an [`InMemory`].
9#[derive(Debug, Clone)]
10#[pyclass(name = "MemoryStore", frozen, subclass)]
11pub struct PyMemoryStore(Arc<InMemory>);
12
13impl AsRef<Arc<InMemory>> for PyMemoryStore {
14    fn as_ref(&self) -> &Arc<InMemory> {
15        &self.0
16    }
17}
18
19impl From<Arc<InMemory>> for PyMemoryStore {
20    fn from(value: Arc<InMemory>) -> Self {
21        Self(value)
22    }
23}
24
25impl<'py> PyMemoryStore {
26    /// Consume self and return the underlying [`InMemory`].
27    pub fn into_inner(self) -> Arc<InMemory> {
28        self.0
29    }
30
31    fn __repr__(&'py self, py: Python<'py>) -> &'py Bound<'py, PyString> {
32        intern!(py, "MemoryStore")
33    }
34}
35
36#[pymethods]
37impl PyMemoryStore {
38    #[new]
39    fn py_new() -> Self {
40        Self(Arc::new(InMemory::new()))
41    }
42
43    fn __eq__(slf: Py<Self>, other: &Bound<PyAny>) -> bool {
44        // Two memory stores are equal only if they are the same object
45        slf.is(other)
46    }
47}