summaryrefslogtreecommitdiff
path: root/src/id_worker.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/id_worker.rs')
-rw-r--r--src/id_worker.rs62
1 files changed, 0 insertions, 62 deletions
diff --git a/src/id_worker.rs b/src/id_worker.rs
deleted file mode 100644
index 248559f..0000000
--- a/src/id_worker.rs
+++ /dev/null
@@ -1,62 +0,0 @@
-use chrono::Utc;
-use parking_lot::Mutex;
-use std::sync::Arc;
-
-#[derive(Default)]
-#[derive(Debug)]
-pub struct IdWorker {
- epoch: i64,
- worker_id: i64,
- datacenter_id: i64,
- sequence: i64,
- time: Arc<Mutex<i64>>,
-}
-
-impl IdWorker {
- pub fn new(epoch: i64, worker_id: i64, datacenter_id: i64) -> IdWorker {
- IdWorker {
- epoch,
- worker_id,
- datacenter_id,
- sequence: 0,
- time: Arc::new(Mutex::new(0)),
- }
- }
-
- #[allow(dead_code)]
- pub fn epoch(&mut self, epoch: i64) -> &mut Self {
- self.epoch = epoch;
- self
- }
-
- #[allow(dead_code)]
- pub fn worker_id(&mut self, worker_id: i64) -> &mut Self {
- self.worker_id = worker_id;
- self
- }
-
- #[allow(dead_code)]
- pub fn datacenter_id(&mut self, datacenter_id: i64) -> &mut Self {
- self.datacenter_id = datacenter_id;
- self
- }
-
- pub fn next_id(&mut self) -> i64 {
- let mut last_timestamp = self.time.lock();
- let mut timestamp = self.get_time();
- if timestamp == *last_timestamp {
- self.sequence = (self.sequence + 1) & (-1 ^ (-1 << 12));
- if self.sequence == 0 && timestamp <= *last_timestamp {
- timestamp = self.get_time();
- }
- } else {
- self.sequence = 0;
- }
- *last_timestamp = timestamp;
- (timestamp << 22) | (self.worker_id << 17) | (self.datacenter_id << 12) | self.sequence
- }
-
- fn get_time(&self) -> i64 {
- Utc::now().timestamp_millis() - self.epoch
- }
-}