blob: 41fcdb26590f9f31af7fd49ac0cef9a20ae7859a [file] [log] [blame]
David Tolnay4a51dc72016-10-01 00:40:31 -07001use super::*;
2
3#[derive(Debug, Clone, Eq, PartialEq)]
4pub struct Crate {
David Tolnayd73dba22016-10-05 23:07:09 -07005 shebang: Option<String>,
David Tolnay4a51dc72016-10-01 00:40:31 -07006 attrs: Vec<Attribute>,
7 items: Vec<Item>,
8}
9
10#[cfg(feature = "parsing")]
11pub mod parsing {
12 use super::*;
13 use attr::parsing::inner_attr;
David Tolnay14cbdeb2016-10-01 12:13:59 -070014 use space::whitespace;
David Tolnay4a51dc72016-10-01 00:40:31 -070015 use item::parsing::item;
David Tolnay4a51dc72016-10-01 00:40:31 -070016
17 named!(pub krate -> Crate, do_parse!(
18 attrs: many0!(inner_attr) >>
19 items: many0!(item) >>
David Tolnay14cbdeb2016-10-01 12:13:59 -070020 option!(whitespace) >>
David Tolnay4a51dc72016-10-01 00:40:31 -070021 (Crate {
David Tolnayd73dba22016-10-05 23:07:09 -070022 shebang: None,
David Tolnay4a51dc72016-10-01 00:40:31 -070023 attrs: attrs,
24 items: items,
25 })
26 ));
27}
28
29#[cfg(feature = "printing")]
30mod printing {
31 use super::*;
32 use attr::FilterAttrs;
33 use quote::{Tokens, ToTokens};
34
35 impl ToTokens for Crate {
36 fn to_tokens(&self, tokens: &mut Tokens) {
37 for attr in self.attrs.inner() {
38 attr.to_tokens(tokens);
39 }
40 for item in &self.items {
41 item.to_tokens(tokens);
42 }
43 }
44 }
45}