Skip to content

Commit 3231b1f

Browse files
author
Tim DuBois
committed
Deserialize from bytes
1 parent 5c5bdac commit 3231b1f

3 files changed

Lines changed: 64 additions & 0 deletions

File tree

serialization-tests/Cargo.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,3 +22,5 @@ version = "1.0"
2222
[dev-dependencies.rmp-serde]
2323
version = "0.13.1"
2424

25+
[dev-dependencies.ron]
26+
version = "0.1.1"

serialization-tests/tests/serialize.rs

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,13 @@ extern crate serde_json;
88

99
extern crate rmp_serde;
1010

11+
extern crate ron;
12+
1113
use serialize::json;
1214

15+
use ron::ser::to_string as ron_serialize;
16+
use ron::de::from_str as ron_deserialize;
17+
1318
use ndarray::{arr0, arr1, arr2, RcArray, RcArray1, RcArray2};
1419

1520
#[test]
@@ -188,3 +193,49 @@ fn serial_many_dim_serde_msgpack()
188193
assert_eq!(a, a_de);
189194
}
190195
}
196+
197+
#[test]
198+
fn serial_many_dim_ron()
199+
{
200+
{
201+
let a = arr0::<f32>(2.72);
202+
203+
let a_s = ron_serialize(&a).unwrap();
204+
205+
let a_de: RcArray<f32, _> = ron_deserialize(&a_s).unwrap();
206+
207+
assert_eq!(a, a_de);
208+
}
209+
210+
{
211+
let a = arr1::<f32>(&[2.72, 1., 2.]);
212+
213+
let a_s = ron_serialize(&a).unwrap();
214+
215+
let a_de: RcArray<f32, _> = ron_deserialize(&a_s).unwrap();
216+
217+
assert_eq!(a, a_de);
218+
}
219+
220+
{
221+
let a = arr2(&[[3., 1., 2.2], [3.1, 4., 7.]]);
222+
223+
let a_s = ron_serialize(&a).unwrap();
224+
225+
let a_de: RcArray<f32, _> = ron_deserialize(&a_s).unwrap();
226+
227+
assert_eq!(a, a_de);
228+
}
229+
230+
{
231+
// Test a sliced array.
232+
let mut a = RcArray::linspace(0., 31., 32).reshape((2, 2, 2, 4));
233+
a.islice(s![..;-1, .., .., ..2]);
234+
235+
let a_s = ron_serialize(&a).unwrap();
236+
237+
let a_de: RcArray<f32, _> = ron_deserialize(&a_s).unwrap();
238+
239+
assert_eq!(a, a_de);
240+
}
241+
}

src/array_serde.rs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,17 @@ impl<'de> Deserialize<'de> for ArrayField {
144144
other => Err(de::Error::unknown_field(other, ARRAY_FIELDS)),
145145
}
146146
}
147+
148+
fn visit_bytes<E>(self, value: &[u8]) -> Result<ArrayField, E>
149+
where E: de::Error
150+
{
151+
match value {
152+
b"v" => Ok(ArrayField::Version),
153+
b"dim" => Ok(ArrayField::Dim),
154+
b"data" => Ok(ArrayField::Data),
155+
other => Err(de::Error::unknown_field(&format!("{:?}",other), ARRAY_FIELDS)),
156+
}
157+
}
147158
}
148159

149160
deserializer.deserialize_identifier(ArrayFieldVisitor)

0 commit comments

Comments
 (0)