in glean-core/rlb/src/private/event.rs [126:183]
fn with_extra_keys() {
let _lock = lock_test();
let _t = new_glean(None, true);
#[derive(Default, Debug, Clone, Hash, Eq, PartialEq)]
struct SomeExtra {
key1: Option<String>,
key2: Option<String>,
}
impl glean_core::traits::ExtraKeys for SomeExtra {
const ALLOWED_KEYS: &'static [&'static str] = &["key1", "key2"];
fn into_ffi_extra(self) -> HashMap<String, String> {
let mut map = HashMap::new();
self.key1.and_then(|key1| map.insert("key1".into(), key1));
self.key2.and_then(|key2| map.insert("key2".into(), key2));
map
}
}
let metric: EventMetric<SomeExtra> = EventMetric::new(CommonMetricData {
name: "event".into(),
category: "test".into(),
send_in_pings: vec!["store1".into()],
..Default::default()
});
let map1 = SomeExtra {
key1: Some("1".into()),
..Default::default()
};
metric.record(map1);
let map2 = SomeExtra {
key1: Some("1".into()),
key2: Some("2".into()),
};
metric.record(map2);
metric.record(None);
let data = metric.test_get_value(None).expect("no event recorded");
assert_eq!(3, data.len());
assert!(data[0].timestamp <= data[1].timestamp);
assert!(data[1].timestamp <= data[2].timestamp);
let mut map = HashMap::new();
map.insert("key1".into(), "1".into());
assert_eq!(Some(map), data[0].extra);
let mut map = HashMap::new();
map.insert("key1".into(), "1".into());
map.insert("key2".into(), "2".into());
assert_eq!(Some(map), data[1].extra);
assert_eq!(None, data[2].extra);
}