| 18 | } |
| 19 | |
| 20 | fn __setitem__(&mut self, idx: isize, value: PyObject) -> PyResult<()> { |
| 21 | let gil = Python::acquire_gil(); |
| 22 | let py = gil.python(); |
| 23 | let value = value.as_ref(py); |
| 24 | let len = self.as_ref().len(); |
| 25 | let idx = cvt_idx(len, idx); |
| 26 | if value.is_instance::<pyo3::types::PyInt>()? |
| 27 | || value.is_instance::<pyo3::types::PyLong>()? |
| 28 | { |
| 29 | let value: i64 = value.extract()?; |
| 30 | match self.as_ref().ty() { |
| 31 | data::DataType::Collection(data::CollectionType::List(data::ValueType::Byte)) => { |
| 32 | self.as_mut().xset(idx, value as u8); |
| 33 | } |
| 34 | _ => self.as_mut().xset(idx, value), |
| 35 | } |
| 36 | } else if value.is_instance::<pyo3::types::PyBool>()? { |
| 37 | let value: bool = value.extract()?; |
| 38 | self.as_mut().xset(idx, value); |
| 39 | } else if value.is_instance::<pyo3::types::PyFloat>()? { |
| 40 | let value: f64 = value.extract()?; |
| 41 | self.as_mut().xset(idx, value); |
| 42 | } else { |
| 43 | unimplemented!() |
| 44 | } |
| 45 | Ok(()) |
| 46 | } |
| 47 | |
| 48 | fn __getitem__(&self, idx: isize) -> PyResult<PyObject> { |
| 49 | let gil = Python::acquire_gil(); |