Pass and parse $crate in type_id impl
diff --git a/macro/src/lib.rs b/macro/src/lib.rs
index fc7828b..b39de52 100644
--- a/macro/src/lib.rs
+++ b/macro/src/lib.rs
@@ -37,6 +37,7 @@
use crate::syntax::namespace::Namespace;
use crate::syntax::qualified::QualifiedName;
use proc_macro::TokenStream;
+use proc_macro2::TokenTree;
use syn::parse::{Parse, ParseStream, Parser, Result};
use syn::parse_macro_input;
@@ -75,14 +76,19 @@
#[proc_macro]
pub fn type_id(input: TokenStream) -> TokenStream {
- struct TypeId(QualifiedName);
+ struct TypeId {
+ krate: TokenTree,
+ path: QualifiedName,
+ }
impl Parse for TypeId {
fn parse(input: ParseStream) -> Result<Self> {
- QualifiedName::parse_quoted_or_unquoted(input).map(TypeId)
+ let krate: TokenTree = input.parse()?;
+ let path = QualifiedName::parse_quoted_or_unquoted(input)?;
+ Ok(TypeId { krate, path })
}
}
let arg = parse_macro_input!(input as TypeId);
- type_id::expand(arg.0).into()
+ type_id::expand(arg.path).into()
}