pyany_serde/pyany_serde_impl/
float_serde.rs1use 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}