Implement set_namespace helper for OutFile
diff --git a/syntax/namespace.rs b/syntax/namespace.rs
index 834a1d5..7628b0a 100644
--- a/syntax/namespace.rs
+++ b/syntax/namespace.rs
@@ -2,6 +2,7 @@
use crate::syntax::Api;
use quote::IdentFragment;
use std::fmt::{self, Display};
+use std::iter::FromIterator;
use std::slice::Iter;
use syn::parse::{Parse, ParseStream, Result};
use syn::{Ident, Token};
@@ -10,7 +11,7 @@
syn::custom_keyword!(namespace);
}
-#[derive(Clone)]
+#[derive(Clone, Default)]
pub struct Namespace {
segments: Vec<Ident>,
}
@@ -37,6 +38,13 @@
}
}
+impl Default for &Namespace {
+ fn default() -> Self {
+ const ROOT: &Namespace = &Namespace::ROOT;
+ ROOT
+ }
+}
+
impl Parse for Namespace {
fn parse(input: ParseStream) -> Result<Self> {
let segments = QualifiedName::parse_quoted_or_unquoted(input)?.segments;
@@ -67,6 +75,16 @@
}
}
+impl<'a> FromIterator<&'a Ident> for Namespace {
+ fn from_iter<I>(idents: I) -> Self
+ where
+ I: IntoIterator<Item = &'a Ident>,
+ {
+ let segments = idents.into_iter().cloned().collect();
+ Namespace { segments }
+ }
+}
+
impl Api {
pub fn namespace(&self) -> Option<&Namespace> {
match self {