1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
use Push; use Type; use Value; use ValueNode; use std::vec; #[derive(Debug, Clone)] pub struct Fields<T> { pub(crate) fields: vec::IntoIter<Field<T>>, } impl<T> Iterator for Fields<T> { type Item = Field<T>; fn next(&mut self) -> Option<Self::Item> { self.fields.next() } } #[derive(Debug, Clone)] pub struct Field<T> { pub(crate) name: String, pub(crate) element: T, } impl<'a> Field<Value<'a>> { pub fn get_name(&self) -> Value<'a> { let node = ValueNode::Str(self.name.clone()); self.element .relative(self.element.function.values.borrow_mut().index_push(node)) } } impl Field<Type> { pub fn get_name(&self) -> String { self.name.clone() } } impl<'a> Field<Value<'a>> { pub fn get_value(&self) -> Value<'a> { self.element } }