// 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/.
use std::marker::PhantomData;
use glean_core::metrics::JsonValue; use glean_core::traits;
usecrate::ErrorType;
// We need to wrap the glean-core type: otherwise if we try to implement // the trait for the metric in `glean_core::metrics` we hit error[E0117]: // only traits defined in the current crate can be implemented for arbitrary // types.
/// Developer-facing API for recording object metrics. /// /// Instances of this class type are automatically generated by the parsers /// at build time, allowing developers to record values that were previously /// registered in the metrics.yaml file. #[derive(Clone)] pubstruct ObjectMetric<K> { pub(crate) inner: glean_core::metrics::ObjectMetric,
object_type: PhantomData<K>,
}
impl<K: traits::ObjectSerialize> ObjectMetric<K> { /// The public constructor used by automatically generated metrics. pubfn new(meta: glean_core::CommonMetricData) -> Self { let inner = glean_core::metrics::ObjectMetric::new(meta); Self {
inner,
object_type: PhantomData,
}
}
/// Sets to the specified structure. /// /// # Arguments /// /// * `object` - the object to set. pubfn set(&self, object: K) { let obj = object
.into_serialized_object()
.expect("failed to serialize object. This should be impossible."); self.inner.set(obj);
}
/// Sets to the specified structure. /// /// Parses the passed JSON string. /// If it can't be parsed into a valid object it records an invalid value error. /// /// # Arguments /// /// * `object` - JSON representation of the object to set. pubfn set_string(&self, object: String) { let data = match K::from_str(&object) {
Ok(data) => data,
Err(_) => { self.inner.record_schema_error(); return;
}
}; self.set(data)
}
/// **Test-only API (exported for FFI purposes).** /// /// Gets the currently stored value as JSON-encoded string. /// /// This doesn't clear the stored value. pubfn test_get_value<'a, S: Into<Option<&'a str>>>(&self, ping_name: S) -> Option<JsonValue> { let ping_name = ping_name.into().map(|s| s.to_string()); self.inner.test_get_value(ping_name)
}
/// **Exported for test purposes.** /// /// Gets the number of recorded errors for the given metric and error type. /// /// # Arguments /// /// * `error` - The type of error /// /// # Returns /// /// The number of errors reported. pubfn test_get_num_recorded_errors(&self, error: ErrorType) -> i32 { self.inner.test_get_num_recorded_errors(error)
}
}
#[cfg(test)] mod test { usesuper::*; usecrate::common_test::{lock_test, new_glean}; usecrate::CommonMetricData;
use serde_json::json;
#[test] fn simple_array() { let _lock = lock_test(); let _t = new_glean(None, true);
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.