blob: 2c1be2f92e51279a377ed4727a25931629d89510 [file] [log] [blame]
David Tolnay87d0b442016-09-04 11:52:12 -07001#[cfg(feature = "printing")]
2extern crate quote;
3
David Tolnayb5a7b142016-09-13 22:46:39 -07004#[cfg(feature = "parsing")]
David Tolnayb79ee962016-09-04 09:39:20 -07005#[macro_use]
David Tolnayb5a7b142016-09-13 22:46:39 -07006mod nom;
David Tolnay6b7aaf02016-09-04 10:39:25 -07007
8#[macro_use]
David Tolnayb79ee962016-09-04 09:39:20 -07009mod helper;
David Tolnay35161ff2016-09-03 11:33:15 -070010
David Tolnay886d8ea2016-09-13 08:34:07 -070011mod escape;
12
David Tolnayb79ee962016-09-04 09:39:20 -070013mod attr;
14pub use attr::{
15 Attribute,
16 MetaItem,
17};
David Tolnay35161ff2016-09-03 11:33:15 -070018
David Tolnayb79ee962016-09-04 09:39:20 -070019mod generics;
20pub use generics::{
21 Generics,
22 Lifetime,
23 LifetimeDef,
David Tolnay55337722016-09-11 12:58:56 -070024 TraitBoundModifier,
David Tolnayb79ee962016-09-04 09:39:20 -070025 TyParam,
26 TyParamBound,
27 WhereBoundPredicate,
David Tolnay55337722016-09-11 12:58:56 -070028 WhereClause,
David Tolnayb79ee962016-09-04 09:39:20 -070029 WherePredicate,
30 WhereRegionPredicate,
31};
David Tolnay35161ff2016-09-03 11:33:15 -070032
David Tolnay55337722016-09-11 12:58:56 -070033mod ident;
34pub use ident::{
35 Ident,
36};
37
David Tolnayb79ee962016-09-04 09:39:20 -070038mod item;
39pub use item::{
40 Body,
41 Field,
42 Item,
David Tolnayb79ee962016-09-04 09:39:20 -070043 Variant,
David Tolnay55337722016-09-11 12:58:56 -070044 VariantData,
45 Visibility,
David Tolnayb79ee962016-09-04 09:39:20 -070046};
David Tolnay35161ff2016-09-03 11:33:15 -070047
David Tolnayb79ee962016-09-04 09:39:20 -070048mod ty;
49pub use ty::{
50 AngleBracketedParameterData,
David Tolnayb79ee962016-09-04 09:39:20 -070051 BareFnTy,
David Tolnay66daf742016-09-07 08:21:49 -070052 FnArg,
David Tolnayb79ee962016-09-04 09:39:20 -070053 FnDecl,
54 FunctionRetTy,
55 MutTy,
56 Mutability,
57 ParenthesizedParameterData,
58 Path,
59 PathParameters,
60 PathSegment,
61 PolyTraitRef,
62 QSelf,
63 Ty,
64 TypeBinding,
65};
David Tolnay35161ff2016-09-03 11:33:15 -070066
David Tolnay55337722016-09-11 12:58:56 -070067#[cfg(feature = "aster")]
68pub mod aster;
David Tolnay7ebb9fb2016-09-03 12:07:47 -070069
David Tolnay55337722016-09-11 12:58:56 -070070#[cfg(feature = "visit")]
71pub mod visit;
72
73#[cfg(feature = "parsing")]
74pub use parsing::*;
75
76#[cfg(feature = "parsing")]
77mod parsing {
78 use super::*;
79 use {generics, item, ty};
80 use nom;
81
82 pub fn parse_item(input: &str) -> Result<Item, String> {
David Tolnayb5a7b142016-09-13 22:46:39 -070083 unwrap("item", item::parsing::item, input)
David Tolnay55337722016-09-11 12:58:56 -070084 }
85
David Tolnay32a112e2016-09-11 17:46:15 -070086 pub fn parse_type(input: &str) -> Result<Ty, String> {
David Tolnayb5a7b142016-09-13 22:46:39 -070087 unwrap("type", ty::parsing::ty, input)
David Tolnay32a112e2016-09-11 17:46:15 -070088 }
89
David Tolnay55337722016-09-11 12:58:56 -070090 pub fn parse_path(input: &str) -> Result<Path, String> {
David Tolnayb5a7b142016-09-13 22:46:39 -070091 unwrap("path", ty::parsing::path, input)
David Tolnay55337722016-09-11 12:58:56 -070092 }
93
94 pub fn parse_where_clause(input: &str) -> Result<WhereClause, String> {
David Tolnayb5a7b142016-09-13 22:46:39 -070095 unwrap("where clause", generics::parsing::where_clause, input)
David Tolnay55337722016-09-11 12:58:56 -070096 }
97
David Tolnayb5a7b142016-09-13 22:46:39 -070098 fn unwrap<T>(name: &'static str, f: fn(&str) -> nom::IResult<&str, T>, input: &str) -> Result<T, String> {
99 match f(input) {
David Tolnay55337722016-09-11 12:58:56 -0700100 nom::IResult::Done(rest, t) => {
101 if rest.is_empty() {
102 Ok(t)
103 } else {
104 Err(format!("remaining tokens after {}: {:?}", name, rest))
David Tolnayc94c38a2016-09-05 17:02:03 -0700105 }
David Tolnay55337722016-09-11 12:58:56 -0700106 }
David Tolnayb5a7b142016-09-13 22:46:39 -0700107 nom::IResult::Error => Err(format!("failed to parse {}: {:?}", name, input)),
David Tolnay35161ff2016-09-03 11:33:15 -0700108 }
David Tolnay35161ff2016-09-03 11:33:15 -0700109 }
110}