From b93a0382a1140a6d77f02f6e6f16d5e147b102e1 Mon Sep 17 00:00:00 2001 From: adjivas Date: Sun, 22 Oct 2017 23:11:12 +0200 Subject: [PATCH] add module file --- src/module.rs | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 src/module.rs diff --git a/src/module.rs b/src/module.rs new file mode 100644 index 0000000..e496ea6 --- /dev/null +++ b/src/module.rs @@ -0,0 +1,38 @@ +use std::rc::Rc; +use std::path::PathBuf; +use std::ffi::OsString; +use std::vec; + +use syntex_syntax::{ast, ptr}; + +#[derive(Default, Debug, Clone)] +pub struct Module { + pub list: Vec>, + pub path: Vec, +} + +impl From<(Vec>, PathBuf)> for Module { + fn from((list, mut path): (Vec>, PathBuf)) -> Module { + path.set_extension(""); + Module { + list: list, + path: path.components() + .skip(1) + .map(|comp| comp.as_os_str().to_os_string()) + .collect::>(), + } + } +} + +impl IntoIterator for Module { + type Item = (ptr::P, Rc>); + type IntoIter = vec::IntoIter<(ptr::P, Rc>)>; + + fn into_iter(self) -> Self::IntoIter { + let ref rc: Rc> = Rc::new(self.path); + self.list.into_iter() + .map(|item| (item, Rc::clone(rc))) + .collect::, Rc>)>>() + .into_iter() + } +}