// This Source Code Form is subject to the terms of the Mozilla Public // License, v. 2.0. If a copy of the MPL was not distributed with this // file, You can obtain one at https://mozilla.org/MPL/2.0/. //! Helper macros for implementing the FFI API for metric types. /// Get a metric object by ID from the corresponding map. /// /// # Arguments /// /// * `$map` - The name of the hash map within `metrics::__glean_metric_maps` /// as generated by glean_parser. /// * `$id` - The ID of the metric to get. macro_rules! metric_get { ($map:ident, $id:ident) => { match $crate::metrics::__glean_metric_maps::$map.get(&$id.into()) { Some(metric) => metric, None => panic!("No metric for id {}", $id), } }; } /// Test whether a value is stored for the metric identified by its ID. /// /// # Arguments /// /// * `$map` - The name of the hash map within `metrics::__glean_metric_maps` /// as generated by glean_parser. /// * `$id` - The ID of the metric to get. /// * `$storage` - the storage name to look into. macro_rules! test_has { ($map:ident, $id:ident, $storage:ident) => {{ let metric = metric_get!($map, $id); let storage = if $storage.is_empty() { None } else { Some($storage.to_utf8()) }; metric.test_get_value(storage.as_deref()).is_some() }}; } /// Get the currently stored value for the metric identified by its ID. /// /// # Arguments /// /// * `$map` - The name of the hash map within `metrics::__glean_metric_maps` /// as generated by glean_parser. /// * `$id` - The ID of the metric to get. /// * `$storage` - the storage name to look into. macro_rules! test_get { ($map:ident, $id:ident, $storage:ident) => {{ let metric = metric_get!($map, $id); let storage = if $storage.is_empty() { None } else { Some($storage.to_utf8()) }; metric.test_get_value(storage.as_deref()).unwrap() }}; }