pyany_serde/pyany_serde_impl/
float_serde.rs

1use pyo3::prelude::*;
2
3use crate::{
4    communication::{append_f64, append_f64_vec, retrieve_f64},
5    PyAnySerde,
6};
7
8#[derive(Clone)]
9pub struct FloatSerde {}
10
11impl PyAnySerde for FloatSerde {
12    fn append<'py>(
13        &mut self,
14        buf: &mut [u8],
15        offset: usize,
16        obj: &Bound<'py, PyAny>,
17    ) -> PyResult<usize> {
18        Ok(append_f64(buf, offset, obj.extract::<f64>()?))
19    }
20
21    fn append_vec<'py>(
22        &mut self,
23        v: &mut Vec<u8>,
24        _start_addr: Option<usize>,
25        obj: &Bound<'py, PyAny>,
26    ) -> PyResult<()> {
27        append_f64_vec(v, obj.extract::<f64>()?);
28        Ok(())
29    }
30
31    fn retrieve<'py>(
32        &mut self,
33        py: Python<'py>,
34        buf: &[u8],
35        offset: usize,
36    ) -> PyResult<(Bound<'py, PyAny>, usize)> {
37        let (val, offset) = retrieve_f64(buf, offset)?;
38        Ok((val.into_pyobject(py)?.into_any(), offset))
39    }
40}