(py: Python, object: PyObject)
| 57 | } |
| 58 | |
| 59 | fn to_data(py: Python, object: PyObject) -> PyResult<data::Data> { |
| 60 | let value = object.as_ref(py); |
| 61 | if value.is_instance::<pyo3::types::PyInt>()? || value.is_instance::<pyo3::types::PyLong>()? { |
| 62 | let value: i64 = value.extract()?; |
| 63 | Ok(data::Data::from(value)) |
| 64 | } else if value.is_instance::<pyo3::types::PyBool>()? { |
| 65 | let value: bool = value.extract()?; |
| 66 | Ok(data::Data::from(value)) |
| 67 | } else if value.is_instance::<pyo3::types::PyFloat>()? { |
| 68 | let value: f64 = value.extract()?; |
| 69 | Ok(data::Data::from(value)) |
| 70 | } else if value.is_instance::<pyo3::types::PyBytes>()? |
| 71 | || value.is_instance::<pyo3::types::PyByteArray>()? |
| 72 | { |
| 73 | let value: Vec<u8> = value.extract()?; |
| 74 | Ok(data::Data::from(value)) |
| 75 | } else if value.is_instance::<pyo3::types::PyString>()? { |
| 76 | let value: String = value.extract()?; |
| 77 | Ok(data::Data::from(value.into_bytes())) |
| 78 | } else if value.is_instance::<PyList>()? { |
| 79 | let value: Py<PyList> = value.extract()?; |
| 80 | let mut b = value.borrow_mut(py); |
| 81 | Ok(b.take()) |
| 82 | } else if value.is_instance::<PyMap>()? { |
| 83 | let value: Py<PyMap> = value.extract()?; |
| 84 | let mut b = value.borrow_mut(py); |
| 85 | Ok(data::Data::from(b.take())) |
| 86 | } else if value.is_instance::<PyCowList>()? { |
| 87 | let value: Py<PyCowList> = value.extract()?; |
| 88 | let mut b = value.borrow_mut(py); |
| 89 | Ok(data::Data::from(b.take())) |
| 90 | } else if value.is_instance::<PyCowMap>()? { |
| 91 | let value: Py<PyCowMap> = value.extract()?; |
| 92 | let mut b = value.borrow_mut(py); |
| 93 | Ok(data::Data::from(b.take())) |
| 94 | } else { |
| 95 | unimplemented!() |
| 96 | } |
| 97 | } |
| 98 | |
| 99 | fn from_data(py: Python, data: impl std::ops::Deref<Target = data::Data>) -> PyResult<PyObject> { |
| 100 | match data.ty() { |
no test coverage detected