Browse Source

improve `Origin`

Add a `::new()` constructor to `OpaqueOrigin` to be able to construct origins
from external code too. Derive `HeapSizeOf` for `Origin`.

fixes #144
fixes #145
Pyfisch 10 years ago
parent
commit
7cd99d7ad1
1 changed files with 14 additions and 3 deletions
  1. 14 3
      src/lib.rs

+ 14 - 3
src/lib.rs

@@ -198,8 +198,19 @@ pub struct Url {
 #[derive(PartialEq, Eq, Clone, Debug)]
 #[derive(PartialEq, Eq, Clone, Debug)]
 pub struct OpaqueOrigin(Uuid);
 pub struct OpaqueOrigin(Uuid);
 
 
+#[cfg(feature="heap_size")]
+known_heap_size!(0, OpaqueOrigin);
+
+impl OpaqueOrigin {
+    /// Creates a new opaque origin with a random UUID.
+    pub fn new() -> OpaqueOrigin {
+        OpaqueOrigin(Uuid::new_v4())
+    }
+}
+
 /// The origin of the URL
 /// The origin of the URL
 #[derive(PartialEq, Eq, Clone, Debug)]
 #[derive(PartialEq, Eq, Clone, Debug)]
+#[cfg_attr(feature="heap_size", derive(HeapSizeOf))]
 pub enum Origin {
 pub enum Origin {
     /// A globally unique identifier
     /// A globally unique identifier
     UID(OpaqueOrigin),
     UID(OpaqueOrigin),
@@ -631,7 +642,7 @@ impl Url {
                 let result = Url::parse(self.non_relative_scheme_data().unwrap());
                 let result = Url::parse(self.non_relative_scheme_data().unwrap());
                 match result {
                 match result {
                     Ok(ref url) => url.origin(),
                     Ok(ref url) => url.origin(),
-                    Err(_)  => Origin::UID(OpaqueOrigin(Uuid::new_v4()))
+                    Err(_)  => Origin::UID(OpaqueOrigin::new())
                 }
                 }
             },
             },
             "ftp" | "gopher" | "http" | "https" | "ws" | "wss" => {
             "ftp" | "gopher" | "http" | "https" | "ws" | "wss" => {
@@ -639,8 +650,8 @@ impl Url {
                     self.port_or_default().unwrap())
                     self.port_or_default().unwrap())
             },
             },
             // TODO: Figure out what to do if the scheme is a file
             // TODO: Figure out what to do if the scheme is a file
-            "file" => Origin::UID(OpaqueOrigin(Uuid::new_v4())),
-            _ => Origin::UID(OpaqueOrigin(Uuid::new_v4()))
+            "file" => Origin::UID(OpaqueOrigin::new()),
+            _ => Origin::UID(OpaqueOrigin::new())
         }
         }
     }
     }