summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/client.rs25
-rw-r--r--src/id_worker.rs62
-rw-r--r--src/main.rs0
-rw-r--r--src/server.rs63
4 files changed, 0 insertions, 150 deletions
diff --git a/src/client.rs b/src/client.rs
deleted file mode 100644
index 75b4c8f..0000000
--- a/src/client.rs
+++ /dev/null
@@ -1,25 +0,0 @@
-// !Sample implementation of a gRPC Client for Clawflake, not meant to production!
-
-pub mod clawflake {
- tonic::include_proto!("clawflake");
-}
-
-use clawflake::clawflake_client::ClawflakeClient;
-use clawflake::IdRequest;
-
-#[tokio::main]
-async fn main() -> Result<(), Box<dyn std::error::Error>> {
- let addr = "http://[::0]:50051";
-
- let mut client = ClawflakeClient::connect(addr).await?;
-
- println!("Client connected to {}", addr);
- let request = tonic::Request::new(IdRequest {});
-
- println!("Trying to get an ID");
- let response = client.get_id(request).await?;
-
- println!("Received: {:?}", response);
-
- Ok(())
-}
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
- }
-}
diff --git a/src/main.rs b/src/main.rs
deleted file mode 100644
index e69de29..0000000
--- a/src/main.rs
+++ /dev/null
diff --git a/src/server.rs b/src/server.rs
deleted file mode 100644
index 16cc044..0000000
--- a/src/server.rs
+++ /dev/null
@@ -1,63 +0,0 @@
-pub mod clawflake {
- tonic::include_proto!("clawflake");
-}
-use clawflake::clawflake_server::{Clawflake, ClawflakeServer};
-use clawflake::{IdReply, IdRequest};
-
-mod id_worker;
-use id_worker::IdWorker;
-
-use std::env;
-use std::net::SocketAddr;
-use tonic::{transport::Server, Request, Response, Status};
-
-#[derive(Debug, Default)]
-pub struct MyClawflakeService {}
-
-#[tonic::async_trait]
-impl Clawflake for MyClawflakeService {
- async fn get_id(&self, _: Request<IdRequest>) -> Result<Response<IdReply>, Status> {
- let mut worker: IdWorker = IdWorker::new(
- env::var("CLAWFLAKE_EPOCH")
- .expect("Missing env `CLAWFLAKE_EPOCH`")
- .parse::<i64>()
- .unwrap(),
- env::var("CLAWFLAKE_WORKER_ID")
- .expect("Missing env `CLAWFLAKE_WORKER_ID`")
- .parse::<i64>()
- .unwrap(),
- env::var("CLAWFLAKE_DATACENTER_ID")
- .expect("Missing env `CLAWFLAKE_DATACENTER_ID`")
- .parse::<i64>()
- .unwrap(),
- );
-
- let reply: IdReply = clawflake::IdReply {
- id: format!("{}", worker.next_id()).into(),
- };
-
- Ok(Response::new(reply))
- }
-}
-
-#[tokio::main]
-async fn main() -> Result<(), Box<dyn std::error::Error>> {
- // init tonic_health
- let (mut health_reporter, health_service) = tonic_health::server::health_reporter();
- health_reporter
- .set_serving::<ClawflakeServer<MyClawflakeService>>()
- .await;
-
- // init tonic and IdWorker
- let addr: SocketAddr = "[::0]:50051".parse()?;
- let srv: MyClawflakeService = MyClawflakeService::default();
-
- println!("Server listening on {}", addr);
-
- Server::builder()
- .add_service(health_service)
- .add_service(ClawflakeServer::new(srv))
- .serve(addr)
- .await?;
- Ok(())
-}