blob: c6443529e936dc35c9660eb3348c70407c89c606 [file] [log] [blame]
David Tolnay754e21c2020-03-29 20:58:46 -07001use std::fmt::{self, Display};
2use std::slice::Iter;
3use std::vec::IntoIter;
4
5#[derive(Clone)]
6pub struct Namespace {
7 segments: Vec<String>,
8}
9
10impl Namespace {
11 pub fn new(segments: Vec<String>) -> Self {
12 Namespace { segments }
13 }
14
15 pub fn iter(&self) -> Iter<String> {
16 self.segments.iter()
17 }
18}
19
20impl Display for Namespace {
21 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
22 for segment in self {
23 f.write_str(segment)?;
24 f.write_str("$")?;
25 }
26 Ok(())
27 }
28}
29
30impl<'a> IntoIterator for &'a Namespace {
31 type Item = &'a String;
32 type IntoIter = Iter<'a, String>;
33 fn into_iter(self) -> Self::IntoIter {
34 self.iter()
35 }
36}
37
38impl IntoIterator for Namespace {
39 type Item = String;
40 type IntoIter = IntoIter<String>;
41 fn into_iter(self) -> Self::IntoIter {
42 self.segments.into_iter()
43 }
44}