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 46
#[derive(Default, Clone, Debug)] pub struct Type { pub closing: Option<Item>, pub opening: Option<Item>, } #[derive(Clone, Debug)] pub enum Item { Annotation, AnnotatedValue, DictionaryKey, DictionaryValue, RecordField, RecordLabel, SequenceValue, SetValue, } impl Type { #[inline] pub fn shift(&mut self, i: Option<Item>) { let tmp = std::mem::replace(&mut self.opening, i); self.closing = tmp; } } pub fn start(i: Item) -> Type { Type { closing: None, opening: Some(i), } } pub fn mid(c: Item, o: Item) -> Type { Type { closing: Some(c), opening: Some(o), } } pub fn end(i: Item) -> Type { Type { closing: Some(i), opening: None, } }