pyany-serde 0.6.0

Serialization and deserialization for Python objects
Documentation
use pyo3::prelude::*;

#[pyclass(skip_from_py_object)]
#[derive(Debug, Clone)]
pub struct ValidationContext {
    pub prompt_for_unpickle: bool,
    pub model_field: Option<String>,
    pub path: String,
}

impl ValidationContext {
    pub fn from_info<'py>(info: &Bound<'py, PyAny>) -> PyResult<ValidationContext> {
        let validation_context_option = info
            .getattr("context")?
            .extract::<Option<Bound<'_, ValidationContext>>>()?;
        let (prompt_for_unpickle, model_field, path) =
            if let Some(validation_context) = validation_context_option {
                (
                    validation_context.borrow().prompt_for_unpickle,
                    validation_context.borrow().model_field.clone(),
                    validation_context.borrow().path.clone(),
                )
            } else {
                (
                    true,
                    info.getattr("field_name")?.extract::<Option<String>>()?,
                    "$".to_string(),
                )
            };
        Ok(ValidationContext {
            prompt_for_unpickle,
            model_field,
            path,
        })
    }
}