Add a Namespace type in gen
diff --git a/gen/namespace.rs b/gen/namespace.rs
new file mode 100644
index 0000000..c644352
--- /dev/null
+++ b/gen/namespace.rs
@@ -0,0 +1,44 @@
+use std::fmt::{self, Display};
+use std::slice::Iter;
+use std::vec::IntoIter;
+
+#[derive(Clone)]
+pub struct Namespace {
+ segments: Vec<String>,
+}
+
+impl Namespace {
+ pub fn new(segments: Vec<String>) -> Self {
+ Namespace { segments }
+ }
+
+ pub fn iter(&self) -> Iter<String> {
+ self.segments.iter()
+ }
+}
+
+impl Display for Namespace {
+ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+ for segment in self {
+ f.write_str(segment)?;
+ f.write_str("$")?;
+ }
+ Ok(())
+ }
+}
+
+impl<'a> IntoIterator for &'a Namespace {
+ type Item = &'a String;
+ type IntoIter = Iter<'a, String>;
+ fn into_iter(self) -> Self::IntoIter {
+ self.iter()
+ }
+}
+
+impl IntoIterator for Namespace {
+ type Item = String;
+ type IntoIter = IntoIter<String>;
+ fn into_iter(self) -> Self::IntoIter {
+ self.segments.into_iter()
+ }
+}