use std::collections::HashMap; use std::sync::atomic::{AtomicUsize, Ordering}; use url::Url; pub struct TrackerManager { counter: AtomicUsize, trackers: HashMap, url_index: HashMap, } pub struct Tracker { url: Url, } pub type TrackerId = usize; impl TrackerManager { pub fn get_tracker_id(&mut self, url: &Url) -> Option { // dht is not a tracker bye if url.scheme() == "dht" { return None; } let url_str = url.as_str(); if let Some(id) = self.url_index.get(url_str) { return Some(*id); } let new_id = self.counter.fetch_add(1, Ordering::AcqRel); self.url_index.insert(url_str.to_string(), new_id); Some(new_id) } }