Skip to content

Commit 3c18c2c

Browse files
committed
Fix rustc-serialize support for Dim migration
1 parent d40836e commit 3c18c2c

File tree

2 files changed

+26
-3
lines changed

2 files changed

+26
-3
lines changed

src/array_serialize.rs

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,27 @@ use super::arraytraits::ARRAY_FORMAT_VERSION;
1111

1212
use imp_prelude::*;
1313

14+
use Dim;
15+
use dimension::DimPrivate;
16+
17+
/// **Requires crate feature `"rustc-serialize"`**
18+
impl<I> Encodable for Dim<I>
19+
where I: Encodable,
20+
{
21+
fn encode<E: Encoder>(&self, s: &mut E) -> Result<(), E::Error> {
22+
self.ix().encode(s)
23+
}
24+
}
25+
26+
/// **Requires crate feature `"rustc-serialize"`**
27+
impl<I> Decodable for Dim<I>
28+
where I: Decodable,
29+
{
30+
fn decode<E: Decoder>(d: &mut E) -> Result<Self, E::Error> {
31+
I::decode(d).map(Dim::new)
32+
}
33+
}
34+
1435
/// **Requires crate feature `"rustc-serialize"`**
1536
impl<A, S, D> Encodable for ArrayBase<S, D>
1637
where A: Encodable,
@@ -43,7 +64,7 @@ impl<A, S, D> Decodable for ArrayBase<S, D>
4364
D: Dimension + Decodable,
4465
S: DataOwned<Elem = A>
4566
{
46-
fn decode<E: Decoder>(d: &mut E) -> Result<ArrayBase<S, D>, E::Error> {
67+
fn decode<E: Decoder>(d: &mut E) -> Result<Self, E::Error> {
4768
d.read_struct("Array", 3, |d| {
4869
let version: u8 = try!(d.read_struct_field("v", 0, Decodable::decode));
4970
if version > ARRAY_FORMAT_VERSION {

tests/serialize.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ use ndarray::{arr0, arr1, arr2, RcArray, RcArray1, RcArray2};
1919
#[test]
2020
fn serial_many_dim()
2121
{
22+
/* rustc-serialize does not support serializing [T; 0]
2223
{
2324
let a = arr0::<f32>(2.72);
2425
let serial = json::encode(&a).unwrap();
@@ -27,12 +28,13 @@ fn serial_many_dim()
2728
println!("{:?}", res);
2829
assert_eq!(a, res.unwrap());
2930
}
31+
*/
3032

3133
{
3234
let a = arr1::<f32>(&[2.72, 1., 2.]);
3335
let serial = json::encode(&a).unwrap();
3436
println!("Encode {:?} => {:?}", a, serial);
35-
let res = json::decode::<RcArray<f32, _>>(&serial);
37+
let res = json::decode::<RcArray1<f32>>(&serial);
3638
println!("{:?}", res);
3739
assert_eq!(a, res.unwrap());
3840
}
@@ -41,7 +43,7 @@ fn serial_many_dim()
4143
let a = arr2(&[[3., 1., 2.2], [3.1, 4., 7.]]);
4244
let serial = json::encode(&a).unwrap();
4345
println!("Encode {:?} => {:?}", a, serial);
44-
let res = json::decode::<RcArray<f32, _>>(&serial);
46+
let res = json::decode::<RcArray2<f32>>(&serial);
4547
println!("{:?}", res);
4648
assert_eq!(a, res.unwrap());
4749
let text = r##"{"v":1,"dim":[2,3],"data":[3,1,2.2,3.1,4,7]}"##;

0 commit comments

Comments
 (0)