]> git.proxmox.com Git - rustc.git/blame - src/test/ui-fulldeps/deriving-encodable-decodable-cell-refcell.rs
New upstream version 1.61.0+dfsg1
[rustc.git] / src / test / ui-fulldeps / deriving-encodable-decodable-cell-refcell.rs
CommitLineData
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 8extern crate rustc_macros;
f035d41b 9extern crate rustc_serialize;
1a4d82fc 10
3dfed10e 11use rustc_macros::{Decodable, Encodable};
ee023bcb 12use rustc_serialize::opaque;
3dfed10e
XL
13use rustc_serialize::{Decodable, Encodable};
14use std::cell::{Cell, RefCell};
1a4d82fc 15
3dfed10e 16#[derive(Encodable, Decodable)]
1a4d82fc 17struct A {
3dfed10e 18 baz: isize,
1a4d82fc
JJ
19}
20
3dfed10e 21#[derive(Encodable, Decodable)]
1a4d82fc
JJ
22struct B {
23 foo: Cell<bool>,
24 bar: RefCell<A>,
25}
26
27fn 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}