]>
Commit | Line | Data |
---|---|---|
416331ca XL |
1 | // run-pass |
2 | ||
0bf4aa26 | 3 | #![allow(unused_imports)] |
1a4d82fc JJ |
4 | // This briefly tests the capability of `Cell` and `RefCell` to implement the |
5 | // `Encodable` and `Decodable` traits via `#[derive(Encodable, Decodable)]` | |
c34b1796 | 6 | #![feature(rustc_private)] |
1a4d82fc | 7 | |
3dfed10e | 8 | extern crate rustc_macros; |
f035d41b | 9 | extern crate rustc_serialize; |
1a4d82fc | 10 | |
3dfed10e | 11 | use rustc_macros::{Decodable, Encodable}; |
ee023bcb | 12 | use rustc_serialize::opaque; |
3dfed10e XL |
13 | use rustc_serialize::{Decodable, Encodable}; |
14 | use std::cell::{Cell, RefCell}; | |
1a4d82fc | 15 | |
3dfed10e | 16 | #[derive(Encodable, Decodable)] |
1a4d82fc | 17 | struct A { |
3dfed10e | 18 | baz: isize, |
1a4d82fc JJ |
19 | } |
20 | ||
3dfed10e | 21 | #[derive(Encodable, Decodable)] |
1a4d82fc JJ |
22 | struct B { |
23 | foo: Cell<bool>, | |
24 | bar: RefCell<A>, | |
25 | } | |
26 | ||
27 | fn main() { | |
3dfed10e | 28 | let obj = B { foo: Cell::new(true), bar: RefCell::new(A { baz: 2 }) }; |
ee023bcb FG |
29 | let mut encoder = opaque::Encoder::new(vec![]); |
30 | obj.encode(&mut encoder).unwrap(); | |
31 | let mut decoder = opaque::Decoder::new(&encoder.data, 0); | |
32 | let obj2 = B::decode(&mut decoder); | |
62682a34 SL |
33 | assert_eq!(obj.foo.get(), obj2.foo.get()); |
34 | assert_eq!(obj.bar.borrow().baz, obj2.bar.borrow().baz); | |
1a4d82fc | 35 | } |