diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Cargo.toml | 9 | ||||
-rw-r--r-- | lib/src/lib.rs | 50 |
2 files changed, 59 insertions, 0 deletions
diff --git a/lib/Cargo.toml b/lib/Cargo.toml new file mode 100644 index 0000000..a43e09e --- /dev/null +++ b/lib/Cargo.toml @@ -0,0 +1,9 @@ +[package] +name = "lib" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +serde = { version = "1.0", features = ["derive"] } 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 |