]> git.proxmox.com Git - rustc.git/blame - src/test/ui-fulldeps/issue-11881.rs
New upstream version 1.49.0+dfsg1
[rustc.git] / src / test / ui-fulldeps / issue-11881.rs
CommitLineData
416331ca
XL
1// run-pass
2
0bf4aa26
XL
3#![allow(unused_must_use)]
4#![allow(dead_code)]
5#![allow(unused_imports)]
d9579d0f 6#![feature(rustc_private)]
1a4d82fc 7
72b1a166
FG
8extern crate rustc_macros;
9extern crate rustc_serialize;
1a4d82fc 10
1a4d82fc 11use std::fmt;
72b1a166
FG
12use std::io::prelude::*;
13use std::io::Cursor;
1a4d82fc
JJ
14use std::slice;
15
72b1a166 16use rustc_macros::Encodable;
416331ca
XL
17use rustc_serialize::json;
18use rustc_serialize::opaque;
72b1a166 19use rustc_serialize::{Encodable, Encoder};
1a4d82fc 20
72b1a166 21#[derive(Encodable)]
1a4d82fc
JJ
22struct Foo {
23 baz: bool,
24}
25
72b1a166 26#[derive(Encodable)]
1a4d82fc 27struct Bar {
c34b1796 28 froboz: usize,
1a4d82fc
JJ
29}
30
31enum WireProtocol {
32 JSON,
9e0c209e 33 Opaque,
1a4d82fc
JJ
34 // ...
35}
36
72b1a166 37fn encode_json<T: for<'a> Encodable<json::Encoder<'a>>>(val: &T, wr: &mut Cursor<Vec<u8>>) {
1a4d82fc
JJ
38 write!(wr, "{}", json::as_json(val));
39}
72b1a166 40fn encode_opaque<T: Encodable<opaque::Encoder>>(val: &T, wr: Vec<u8>) {
9e0c209e 41 let mut encoder = opaque::Encoder::new(wr);
1a4d82fc
JJ
42 val.encode(&mut encoder);
43}
44
45pub fn main() {
72b1a166 46 let target = Foo { baz: false };
1a4d82fc
JJ
47 let proto = WireProtocol::JSON;
48 match proto {
8faf50e0 49 WireProtocol::JSON => encode_json(&target, &mut Cursor::new(Vec::new())),
72b1a166 50 WireProtocol::Opaque => encode_opaque(&target, Vec::new()),
1a4d82fc
JJ
51 }
52}