Skip to content

Commit f990d3f

Browse files
committed
Implement TestSerializer to replace serde_json for the serialize tests
1 parent 502c172 commit f990d3f

File tree

3 files changed

+192
-10
lines changed

3 files changed

+192
-10
lines changed

ext_tests/Cargo.toml

+1-2
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,11 @@ edition = "2018"
66
publish = false
77

88
[dependencies]
9-
serde_json = "1.0"
109
serde = "1.0"
1110

1211
[dependencies.js_int]
1312
path = "../"
1413
features = ["serde"]
1514

1615
[features]
17-
lax_deserialize = ["js_int/lax_deserialize", "serde_json/float_roundtrip"]
16+
lax_deserialize = ["js_int/lax_deserialize"]

ext_tests/src/lib.rs

+10-8
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,17 @@
1+
mod test_serializer;
2+
13
#[cfg(test)]
24
mod tests {
3-
use serde::{de::IntoDeserializer, Deserialize};
4-
use serde_json::{from_str as from_json_str, to_string as to_json_string};
5-
65
use js_int::{int, uint, Int, UInt};
6+
use serde::{de::IntoDeserializer, Deserialize, Serialize};
7+
8+
use crate::test_serializer::{Serialized, TestSerializer};
79

810
#[test]
911
fn serialize_int() {
10-
assert_eq!(to_json_string(&int!(100)).unwrap(), "100");
11-
assert_eq!(to_json_string(&int!(0)).unwrap(), "0");
12-
assert_eq!(to_json_string(&int!(-100)).unwrap(), "-100");
12+
assert_eq!(int!(100).serialize(TestSerializer).unwrap(), Serialized::Signed(100));
13+
assert_eq!(int!(0).serialize(TestSerializer).unwrap(), Serialized::Signed(0));
14+
assert_eq!(int!(-100).serialize(TestSerializer).unwrap(), Serialized::Signed(-100));
1315
}
1416

1517
#[test]
@@ -25,8 +27,8 @@ mod tests {
2527

2628
#[test]
2729
fn serialize_uint() {
28-
assert_eq!(to_json_string(&uint!(100)).unwrap(), "100");
29-
assert_eq!(to_json_string(&uint!(0)).unwrap(), "0");
30+
assert_eq!(uint!(100).serialize(TestSerializer).unwrap(), Serialized::Unsigned(100));
31+
assert_eq!(uint!(0).serialize(TestSerializer).unwrap(), Serialized::Unsigned(0));
3032
}
3133

3234
#[test]

ext_tests/src/test_serializer.rs

+181
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,181 @@
1+
use serde::{ser::Impossible, Serialize, Serializer};
2+
3+
pub struct TestSerializer;
4+
5+
#[derive(Debug, PartialEq)]
6+
pub enum Serialized {
7+
Signed(i64),
8+
Unsigned(u64),
9+
}
10+
11+
impl Serializer for TestSerializer {
12+
type Ok = Serialized;
13+
type Error = serde::de::value::Error;
14+
type SerializeSeq = Impossible<Self::Ok, Self::Error>;
15+
type SerializeTuple = Impossible<Self::Ok, Self::Error>;
16+
type SerializeTupleStruct = Impossible<Self::Ok, Self::Error>;
17+
type SerializeTupleVariant = Impossible<Self::Ok, Self::Error>;
18+
type SerializeMap = Impossible<Self::Ok, Self::Error>;
19+
type SerializeStruct = Impossible<Self::Ok, Self::Error>;
20+
type SerializeStructVariant = Impossible<Self::Ok, Self::Error>;
21+
22+
fn serialize_i64(self, value: i64) -> Result<Self::Ok, Self::Error> {
23+
Ok(Serialized::Signed(value))
24+
}
25+
26+
fn serialize_u64(self, value: u64) -> Result<Self::Ok, Self::Error> {
27+
Ok(Serialized::Unsigned(value))
28+
}
29+
30+
// Required because `Int` and `UInt` are both newtype structs so this method is called by the
31+
// serialize implementation generated by `#[derive(Serialize)]`
32+
fn serialize_newtype_struct<T: ?Sized>(
33+
self,
34+
_: &'static str,
35+
value: &T,
36+
) -> Result<Self::Ok, Self::Error>
37+
where
38+
T: Serialize,
39+
{
40+
value.serialize(self)
41+
}
42+
43+
// The remaining methods are all unimplemented
44+
45+
fn serialize_bool(self, _: bool) -> Result<Self::Ok, Self::Error> {
46+
unimplemented!()
47+
}
48+
49+
fn serialize_i8(self, _: i8) -> Result<Self::Ok, Self::Error> {
50+
unimplemented!()
51+
}
52+
53+
fn serialize_i16(self, _: i16) -> Result<Self::Ok, Self::Error> {
54+
unimplemented!()
55+
}
56+
57+
fn serialize_i32(self, _: i32) -> Result<Self::Ok, Self::Error> {
58+
unimplemented!()
59+
}
60+
61+
fn serialize_u8(self, _: u8) -> Result<Self::Ok, Self::Error> {
62+
unimplemented!()
63+
}
64+
65+
fn serialize_u16(self, _: u16) -> Result<Self::Ok, Self::Error> {
66+
unimplemented!()
67+
}
68+
69+
fn serialize_u32(self, _: u32) -> Result<Self::Ok, Self::Error> {
70+
unimplemented!()
71+
}
72+
73+
fn serialize_f32(self, _: f32) -> Result<Self::Ok, Self::Error> {
74+
unimplemented!()
75+
}
76+
77+
fn serialize_f64(self, _: f64) -> Result<Self::Ok, Self::Error> {
78+
unimplemented!()
79+
}
80+
81+
fn serialize_char(self, _: char) -> Result<Self::Ok, Self::Error> {
82+
unimplemented!()
83+
}
84+
85+
fn serialize_str(self, _: &str) -> Result<Self::Ok, Self::Error> {
86+
unimplemented!()
87+
}
88+
89+
fn serialize_bytes(self, _: &[u8]) -> Result<Self::Ok, Self::Error> {
90+
unimplemented!()
91+
}
92+
93+
fn serialize_none(self) -> Result<Self::Ok, Self::Error> {
94+
unimplemented!()
95+
}
96+
97+
fn serialize_some<T: ?Sized>(self, _: &T) -> Result<Self::Ok, Self::Error>
98+
where
99+
T: Serialize,
100+
{
101+
unimplemented!()
102+
}
103+
104+
fn serialize_unit(self) -> Result<Self::Ok, Self::Error> {
105+
unimplemented!()
106+
}
107+
108+
fn serialize_unit_struct(self, _: &'static str) -> Result<Self::Ok, Self::Error> {
109+
unimplemented!()
110+
}
111+
112+
fn serialize_unit_variant(
113+
self,
114+
_: &'static str,
115+
_: u32,
116+
_: &'static str,
117+
) -> Result<Self::Ok, Self::Error> {
118+
unimplemented!()
119+
}
120+
121+
fn serialize_newtype_variant<T: ?Sized>(
122+
self,
123+
_: &'static str,
124+
_: u32,
125+
_: &'static str,
126+
_: &T,
127+
) -> Result<Self::Ok, Self::Error>
128+
where
129+
T: Serialize,
130+
{
131+
unimplemented!()
132+
}
133+
134+
fn serialize_seq(self, _: Option<usize>) -> Result<Self::SerializeSeq, Self::Error> {
135+
unimplemented!()
136+
}
137+
138+
fn serialize_tuple(self, _: usize) -> Result<Self::SerializeTuple, Self::Error> {
139+
unimplemented!()
140+
}
141+
142+
fn serialize_tuple_struct(
143+
self,
144+
_: &'static str,
145+
_: usize,
146+
) -> Result<Self::SerializeTupleStruct, Self::Error> {
147+
unimplemented!()
148+
}
149+
150+
fn serialize_tuple_variant(
151+
self,
152+
_: &'static str,
153+
_: u32,
154+
_: &'static str,
155+
_: usize,
156+
) -> Result<Self::SerializeTupleVariant, Self::Error> {
157+
unimplemented!()
158+
}
159+
160+
fn serialize_map(self, _: Option<usize>) -> Result<Self::SerializeMap, Self::Error> {
161+
unimplemented!()
162+
}
163+
164+
fn serialize_struct(
165+
self,
166+
_: &'static str,
167+
_: usize,
168+
) -> Result<Self::SerializeStruct, Self::Error> {
169+
unimplemented!()
170+
}
171+
172+
fn serialize_struct_variant(
173+
self,
174+
_: &'static str,
175+
_: u32,
176+
_: &'static str,
177+
_: usize,
178+
) -> Result<Self::SerializeStructVariant, Self::Error> {
179+
unimplemented!()
180+
}
181+
}

0 commit comments

Comments
 (0)