Skip to content
This repository was archived by the owner on Jun 3, 2025. It is now read-only.

Commit 2a7d6a4

Browse files
feat: Add JsonSerialize and ValueDeserialize impls for f32, f64
1 parent 1843f29 commit 2a7d6a4

File tree

4 files changed

+43
-3
lines changed

4 files changed

+43
-3
lines changed

merde_core/src/deserialize.rs

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -229,6 +229,34 @@ impl<'s> ValueDeserialize<'s> for isize {
229229
}
230230
}
231231

232+
impl<'s> ValueDeserialize<'s> for f32 {
233+
fn from_value_ref<'val>(value: Option<&'val Value<'s>>) -> Result<Self, MerdeError> {
234+
match value {
235+
Some(Value::Float(f)) => Ok(*f as f32),
236+
Some(Value::Int(i)) => Ok(*i as f32),
237+
Some(v) => Err(MerdeError::MismatchedType {
238+
expected: ValueType::Float,
239+
found: v.value_type(),
240+
}),
241+
None => Err(MerdeError::MissingValue),
242+
}
243+
}
244+
}
245+
246+
impl<'s> ValueDeserialize<'s> for f64 {
247+
fn from_value_ref<'val>(value: Option<&'val Value<'s>>) -> Result<Self, MerdeError> {
248+
match value {
249+
Some(Value::Float(f)) => Ok(*f),
250+
Some(Value::Int(i)) => Ok(*i as f64),
251+
Some(v) => Err(MerdeError::MismatchedType {
252+
expected: ValueType::Float,
253+
found: v.value_type(),
254+
}),
255+
None => Err(MerdeError::MissingValue),
256+
}
257+
}
258+
}
259+
232260
impl<'s> ValueDeserialize<'s> for bool {
233261
fn from_value_ref<'val>(value: Option<&'val Value<'s>>) -> Result<Self, MerdeError> {
234262
match value {

merde_core/src/into_static.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ macro_rules! impl_into_static_passthru {
4949
}
5050

5151
impl_into_static_passthru!(
52-
String, u128, u64, u32, u16, u8, i128, i64, i32, i16, i8, bool, char, f32, f64, usize, isize
52+
String, u128, u64, u32, u16, u8, i128, i64, i32, i16, i8, bool, char, usize, isize, f32, f64
5353
);
5454

5555
impl<T: IntoStatic> IntoStatic for Option<T> {

merde_core/src/with_lifetime.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,10 +59,10 @@ impl_with_lifetime!(
5959
i8,
6060
bool,
6161
char,
62-
f32,
63-
f64,
6462
usize,
6563
isize,
64+
f32,
65+
f64,
6666
);
6767

6868
impl<'s> WithLifetime<'s> for () {

merde_json/src/lib.rs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -325,6 +325,18 @@ impl JsonSerialize for isize {
325325
}
326326
}
327327

328+
impl JsonSerialize for f32 {
329+
fn json_serialize(&self, serializer: &mut JsonSerializer) {
330+
serializer.write_f64(*self as f64);
331+
}
332+
}
333+
334+
impl JsonSerialize for f64 {
335+
fn json_serialize(&self, serializer: &mut JsonSerializer) {
336+
serializer.write_f64(*self);
337+
}
338+
}
339+
328340
impl JsonSerialize for bool {
329341
fn json_serialize(&self, serializer: &mut JsonSerializer) {
330342
serializer.write_bool(*self);

0 commit comments

Comments
 (0)