1 | use std::collections::BTreeMap; |
2 | |
3 | use serde_json::value::Value as Json; |
4 | |
5 | #[derive (Default, Debug, Clone)] |
6 | pub(crate) struct LocalVars { |
7 | first: Option<Json>, |
8 | last: Option<Json>, |
9 | index: Option<Json>, |
10 | key: Option<Json>, |
11 | |
12 | extra: BTreeMap<String, Json>, |
13 | } |
14 | |
15 | impl LocalVars { |
16 | pub fn put(&mut self, key: &str, value: Json) { |
17 | match key { |
18 | "first" => self.first = Some(value), |
19 | "last" => self.last = Some(value), |
20 | "index" => self.index = Some(value), |
21 | "key" => self.key = Some(value), |
22 | _ => { |
23 | self.extra.insert(key:key.to_owned(), value); |
24 | } |
25 | } |
26 | } |
27 | |
28 | pub fn get(&self, key: &str) -> Option<&Json> { |
29 | match key { |
30 | "first" => self.first.as_ref(), |
31 | "last" => self.last.as_ref(), |
32 | "index" => self.index.as_ref(), |
33 | "key" => self.key.as_ref(), |
34 | _ => self.extra.get(key), |
35 | } |
36 | } |
37 | } |
38 | |