#[cfg(feature = "pymethods")]
mod construction;
#[cfg(feature = "pymethods")]
mod export;
#[cfg(feature = "pymethods")]
mod general;
#[cfg(feature = "pymethods")]
mod io;
#[cfg(feature = "pymethods")]
mod map;
#[cfg(feature = "pymethods")]
mod serde;

use parking_lot::RwLock;
use polars::prelude::DataFrame;
use pyo3::pyclass;

#[pyclass(frozen)]
#[repr(transparent)]
pub struct PyDataFrame {
    pub df: RwLock<DataFrame>,
}

impl Clone for PyDataFrame {
    fn clone(&self) -> Self {
        PyDataFrame {
            df: RwLock::new(self.df.read().clone()),
        }
    }
}

impl From<DataFrame> for PyDataFrame {
    fn from(df: DataFrame) -> Self {
        Self::new(df)
    }
}

impl From<PyDataFrame> for DataFrame {
    fn from(pdf: PyDataFrame) -> Self {
        pdf.df.into_inner()
    }
}

impl PyDataFrame {
    pub(crate) fn new(df: DataFrame) -> Self {
        PyDataFrame {
            df: RwLock::new(df),
        }
    }
}
