Preserve Span of namespace segments
diff --git a/syntax/namespace.rs b/syntax/namespace.rs
index d26bb9e..5230eb6 100644
--- a/syntax/namespace.rs
+++ b/syntax/namespace.rs
@@ -3,7 +3,7 @@
use std::fmt::{self, Display};
use std::slice::Iter;
use syn::parse::{Parse, ParseStream, Result};
-use syn::{Path, Token};
+use syn::{Ident, Path, Token};
mod kw {
syn::custom_keyword!(namespace);
@@ -11,7 +11,7 @@
#[derive(Clone)]
pub struct Namespace {
- segments: Vec<String>,
+ segments: Vec<Ident>,
}
impl Namespace {
@@ -21,7 +21,7 @@
}
}
- pub fn iter(&self) -> Iter<String> {
+ pub fn iter(&self) -> Iter<Ident> {
self.segments.iter()
}
}
@@ -35,7 +35,7 @@
let path = input.call(Path::parse_mod_style)?;
for segment in path.segments {
ident::check(&segment.ident)?;
- segments.push(segment.ident.to_string());
+ segments.push(segment.ident);
}
input.parse::<Option<Token![,]>>()?;
}
@@ -46,8 +46,7 @@
impl Display for Namespace {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
for segment in self {
- f.write_str(segment)?;
- f.write_str("$")?;
+ write!(f, "{}$", segment)?;
}
Ok(())
}
@@ -60,8 +59,8 @@
}
impl<'a> IntoIterator for &'a Namespace {
- type Item = &'a String;
- type IntoIter = Iter<'a, String>;
+ type Item = &'a Ident;
+ type IntoIter = Iter<'a, Ident>;
fn into_iter(self) -> Self::IntoIter {
self.iter()
}