use super::*;
ast_struct! {
pub struct File {
pub shebang: Option<String>,
pub attrs: Vec<Attribute>,
pub items: Vec<Item>,
}
}
#[cfg(feature = "parsing")]
pub mod parsing {
use super::*;
use synom::Synom;
impl Synom for File {
named!(parse -> Self, do_parse!(
attrs: many0!(call!(Attribute::parse_inner)) >>
items: many0!(syn!(Item)) >>
(File {
shebang: None,
attrs: attrs,
items: items,
})
));
fn description() -> Option<&'static str> {
Some("crate")
}
}
}
#[cfg(feature = "printing")]
mod printing {
use super::*;
use attr::FilterAttrs;
use quote::{Tokens, ToTokens};
impl ToTokens for File {
fn to_tokens(&self, tokens: &mut Tokens) {
tokens.append_all(self.attrs.inner());
tokens.append_all(&self.items);
}
}
}