]> git.lizzy.rs Git - rust.git/blob - src/test/ui-fulldeps/issue-11881.rs
Rollup merge of #68504 - tmiasko:check-pass, r=alexcrichton
[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
7 #![feature(rustc_private)]
8
9 extern crate serialize as rustc_serialize;
10
11 use std::io::Cursor;
12 use std::io::prelude::*;
13 use std::fmt;
14 use std::slice;
15
16 use rustc_serialize::{Encodable, Encoder};
17 use rustc_serialize::json;
18 use rustc_serialize::opaque;
19
20 #[derive(RustcEncodable)]
21 struct Foo {
22     baz: bool,
23 }
24
25 #[derive(RustcEncodable)]
26 struct Bar {
27     froboz: usize,
28 }
29
30 enum WireProtocol {
31     JSON,
32     Opaque,
33     // ...
34 }
35
36 fn encode_json<T: Encodable>(val: &T, wr: &mut Cursor<Vec<u8>>) {
37     write!(wr, "{}", json::as_json(val));
38 }
39 fn encode_opaque<T: Encodable>(val: &T, wr: Vec<u8>) {
40     let mut encoder = opaque::Encoder::new(wr);
41     val.encode(&mut encoder);
42 }
43
44 pub fn main() {
45     let target = Foo{baz: false,};
46     let proto = WireProtocol::JSON;
47     match proto {
48         WireProtocol::JSON => encode_json(&target, &mut Cursor::new(Vec::new())),
49         WireProtocol::Opaque => encode_opaque(&target, Vec::new())
50     }
51 }