about summary refs log tree commit diff
path: root/lib/src
diff options
context:
space:
mode:
Diffstat (limited to 'lib/src')
-rw-r--r--lib/src/lib.rs50
1 files changed, 50 insertions, 0 deletions
diff --git a/lib/src/lib.rs b/lib/src/lib.rs
new file mode 100644
index 0000000..a11637f
--- /dev/null
+++ b/lib/src/lib.rs
@@ -0,0 +1,50 @@
+pub mod lib {
+    use serde::{Serialize,Deserialize};
+    use std::sync::Arc;
+    use std::hash::{Hash, Hasher};
+    use std::cmp::Ordering;
+
+    #[derive(Serialize, Deserialize, Debug)]
+    pub struct CrawledResource {
+        pub url: String,
+        pub content: String,
+    }
+
+    #[derive(Debug, Clone, Serialize, Deserialize)]
+    pub struct IndexedResource {
+        pub url: String,
+        pub title: String,
+        pub description: String,
+        pub priority: u32,
+        pub word: Arc<String>,
+    }
+
+    //We implement PartialEq, Eq and Hash to ignore the priority field.
+    impl PartialEq for IndexedResource {
+        fn eq(&self, other: &Self) -> bool {
+            self.url == other.url && self.word == other.word
+        }
+    }
+    impl Eq for IndexedResource {}
+
+    impl PartialOrd for IndexedResource {
+        fn partial_cmp(&self, other: &Self) -> Option<Ordering> {
+            Some(self.cmp(other))
+        }
+    }
+
+    impl Ord for IndexedResource {
+        fn cmp(&self, other: &Self) -> Ordering {
+            self.priority.cmp(&other.priority).reverse()
+        }
+    }
+
+    impl Hash for IndexedResource {
+        fn hash<H: Hasher>(&self, state: &mut H) {
+            self.url.hash(state);
+            self.word.hash(state);
+        }
+    }
+
+
+}
\ No newline at end of file