]> git.lizzy.rs Git - rust.git/blob - src/test/run-pass-fulldeps/derive-totalsum.rs
Auto merge of #28922 - panicbit:trpl-missing-docs, r=steveklabnik
[rust.git] / src / test / run-pass-fulldeps / derive-totalsum.rs
1 // Copyright 2015 The Rust Project Developers. See the COPYRIGHT
2 // file at the top-level directory of this distribution and at
3 // http://rust-lang.org/COPYRIGHT.
4 //
5 // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6 // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8 // option. This file may not be copied, modified, or distributed
9 // except according to those terms.
10
11 // aux-build:custom_derive_plugin.rs
12 // ignore-stage1
13
14 #![feature(plugin, custom_derive)]
15 #![plugin(custom_derive_plugin)]
16
17 trait TotalSum {
18     fn total_sum(&self) -> isize;
19 }
20
21 impl TotalSum for isize {
22     fn total_sum(&self) -> isize {
23         *self
24     }
25 }
26
27 struct Seven;
28
29 impl TotalSum for Seven {
30     fn total_sum(&self) -> isize {
31         7
32     }
33 }
34
35 #[derive(TotalSum)]
36 struct Foo {
37     seven: Seven,
38     bar: Bar,
39     baz: isize,
40 }
41
42 #[derive(TotalSum)]
43 struct Bar {
44     quux: isize,
45     bleh: isize,
46 }
47
48
49 pub fn main() {
50     let v = Foo {
51         seven: Seven,
52         bar: Bar {
53             quux: 9,
54             bleh: 3,
55         },
56         baz: 80,
57     };
58     assert_eq!(v.total_sum(), 99);
59 }