summaryrefslogtreecommitdiff
path: root/src/context.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/context.rs')
-rw-r--r--src/context.rs27
1 files changed, 27 insertions, 0 deletions
diff --git a/src/context.rs b/src/context.rs
index 4501a0a..0b51677 100644
--- a/src/context.rs
+++ b/src/context.rs
@@ -40,6 +40,33 @@ impl<'a> MappedList<'a> for Vec<Value> {
40 } 40 }
41} 41}
42 42
43impl<'a> MappedList<'a> for Vec<MappedValue<'a>> {
44 fn get_index(&'a self, id: usize) -> Option<MappedValue<'a>> {
45 if let Some(x) = self.get(id) {
46 Some(*x)
47 } else {
48 None
49 }
50 }
51
52 fn for_each(&'a self, func: &dyn Fn(&MappedValue<'a>, &mut String) -> CrimResult<()>) -> CrimResult<String> {
53 let mut buf = String::new();
54 for i in self {
55 func( i, &mut buf )?;
56 }
57 Ok(buf)
58 }
59}
60
61pub type MappedHash<'a> = HashMap<String, MappedValue<'a>>;
62
63impl<'a> MappedStructure<'a> for MappedHash<'a> {
64 fn get_value(&'a self, id: &str) -> Option<MappedValue<'a>> {
65 self.get(id).copied()
66 }
67}
68
69#[derive(Copy,Clone)]
43pub enum MappedValue<'a> { 70pub enum MappedValue<'a> {
44 Struct(&'a dyn MappedStructure<'a>), 71 Struct(&'a dyn MappedStructure<'a>),
45 List(&'a dyn MappedList<'a>), 72 List(&'a dyn MappedList<'a>),