]> git.lizzy.rs Git - rust.git/blob - src/test/ui-fulldeps/issue-11881.rs
Rollup merge of #91294 - cjgillot:process-elem, r=jackh726
[rust.git] / src / test / ui-fulldeps / issue-11881.rs
1 // run-pass
2
3 #![allow(unused_must_use)]
4 #![allow(dead_code)]
5 #![allow(unused_imports)]
6 #![feature(rustc_private)]
7
8 extern crate rustc_macros;
9 extern crate rustc_serialize;
10
11 use std::fmt;
12 use std::io::prelude::*;
13 use std::io::Cursor;
14 use std::slice;
15
16 use rustc_macros::Encodable;
17 use rustc_serialize::json;
18 use rustc_serialize::opaque;
19 use rustc_serialize::{Encodable, Encoder};
20
21 #[derive(Encodable)]
22 struct Foo {
23     baz: bool,
24 }
25
26 #[derive(Encodable)]
27 struct Bar {
28     froboz: usize,
29 }
30
31 enum WireProtocol {
32     JSON,
33     Opaque,
34     // ...
35 }
36
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));
39 }
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);
43 }
44
45 pub fn main() {
46     let target = Foo { baz: false };
47     let proto = WireProtocol::JSON;
48     match proto {
49         WireProtocol::JSON => encode_json(&target, &mut Cursor::new(Vec::new())),
50         WireProtocol::Opaque => encode_opaque(&target, Vec::new()),
51     }
52 }