3 #![allow(unused_must_use)]
5 #![allow(unused_imports)]
6 #![feature(rustc_private)]
8 extern crate rustc_macros;
9 extern crate rustc_serialize;
12 use std::io::prelude::*;
16 use rustc_macros::Encodable;
17 use rustc_serialize::json;
18 use rustc_serialize::opaque;
19 use rustc_serialize::{Encodable, Encoder};
37 fn encode_json<T: for<'a> Encodable<json::Encoder<'a>>>(val: &T, wr: &mut Cursor<Vec<u8>>) {
38 write!(wr, "{}", json::as_json(val));
40 fn encode_opaque<T: Encodable<opaque::Encoder>>(val: &T, wr: Vec<u8>) {
41 let mut encoder = opaque::Encoder::new(wr);
42 val.encode(&mut encoder);
46 let target = Foo { baz: false };
47 let proto = WireProtocol::JSON;
49 WireProtocol::JSON => encode_json(&target, &mut Cursor::new(Vec::new())),
50 WireProtocol::Opaque => encode_opaque(&target, Vec::new()),