use prelude::*;
pub struct MetaItemBuilder {
node: Option<MetaItem>,
}
impl MetaItemBuilder {
pub fn new() -> MetaItemBuilder {
MetaItemBuilder { node: None }
}
pub fn get_words(&self) -> Vec<String> {
let mut values = Vec::new();
if let MetaItemKind::List(ref inners) = self.node.as_ref().unwrap().node {
for inner in inners {
if let NestedMetaItemKind::MetaItem(ref inner) = inner.node {
if let MetaItemKind::Word = inner.node {
values.push(inner.name.to_string());
}
}
}
}
values
}
pub fn get_name_value(&self) -> Option<String> {
if let MetaItemKind::NameValue(ref spanned) = self.node.as_ref().unwrap().node {
if let LitKind::Str(ref value, _) = spanned.node {
return Some(value.to_string());
}
}
None
}
pub fn get_name(&self) -> String {
self.node.as_ref().unwrap().name.to_string()
}
}
impl<'a> From<&'a MetaItem> for MetaItemBuilder {
fn from(meta: &MetaItem) -> MetaItemBuilder {
MetaItemBuilder { node: Some(meta.clone()) }
}
}