aboutsummaryrefslogtreecommitdiffstats
path: root/components/shared/base/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'components/shared/base/lib.rs')
-rw-r--r--components/shared/base/lib.rs45
1 files changed, 45 insertions, 0 deletions
diff --git a/components/shared/base/lib.rs b/components/shared/base/lib.rs
new file mode 100644
index 00000000000..2057c9aa8c2
--- /dev/null
+++ b/components/shared/base/lib.rs
@@ -0,0 +1,45 @@
+/* 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/. */
+
+#![deny(unsafe_code)]
+
+//! A crate to hold very common types in Servo.
+//!
+//! You should almost never need to add a data type to this crate. Instead look for
+//! a more shared crate that has fewer dependents.
+
+use serde::{Deserialize, Serialize};
+
+pub mod id;
+pub mod print_tree;
+use webrender_api::Epoch as WebRenderEpoch;
+
+/// A struct for denoting the age of messages; prevents race conditions.
+#[derive(Clone, Copy, Debug, Deserialize, Eq, Hash, Ord, PartialEq, PartialOrd, Serialize)]
+pub struct Epoch(pub u32);
+
+impl Epoch {
+ pub fn next(&mut self) {
+ self.0 += 1;
+ }
+}
+
+impl From<Epoch> for WebRenderEpoch {
+ fn from(val: Epoch) -> Self {
+ WebRenderEpoch(val.0)
+ }
+}
+
+pub trait WebRenderEpochToU16 {
+ fn as_u16(&self) -> u16;
+}
+
+impl WebRenderEpochToU16 for WebRenderEpoch {
+ /// The value of this [`Epoch`] as a u16 value. Note that if this Epoch's
+ /// value is more than u16::MAX, then the return value will be modulo
+ /// u16::MAX.
+ fn as_u16(&self) -> u16 {
+ (self.0 % u16::MAX as u32) as u16
+ }
+}