vector_core/event/util/log/
keys.rs1use super::all_fields;
2use crate::event::{KeyString, ObjectMap};
3
4pub fn keys(fields: &ObjectMap) -> impl Iterator<Item = KeyString> + '_ {
8 all_fields(fields).map(|(k, _)| k)
9}
10
11#[cfg(test)]
12mod test {
13 use serde_json::json;
14
15 use super::{super::test::fields_from_json, *};
16
17 #[test]
18 fn keys_simple() {
19 let fields = fields_from_json(json!({
20 "field2": 3,
21 "field1": 4,
22 "field3": 5
23 }));
24 let expected: Vec<_> = vec!["field1", "field2", "field3"]
25 .into_iter()
26 .map(KeyString::from)
27 .collect();
28
29 let collected: Vec<_> = keys(&fields).collect();
30 assert_eq!(collected, expected);
31 }
32
33 #[test]
34 fn keys_nested() {
35 let fields = fields_from_json(json!({
36 "a": {
37 "b": {
38 "c": 5
39 },
40 "a": 4,
41 "array": [null, 3, {
42 "x": 1
43 }, [2]]
44 }
45 }));
46 let expected: Vec<_> = vec![
47 "a.a",
48 "a.array[0]",
49 "a.array[1]",
50 "a.array[2].x",
51 "a.array[3][0]",
52 "a.b.c",
53 ]
54 .into_iter()
55 .map(KeyString::from)
56 .collect();
57
58 let collected: Vec<_> = keys(&fields).collect();
59 assert_eq!(collected, expected);
60 }
61}