Skip to main content

Grove/Common/
mod.rs

1//! Common Module
2//!
3//! Provides shared utilities, traits, and error types
4//! used across the Grove codebase.
5
6#[path = "Error.rs"]
7pub mod Error;
8#[path = "Traits.rs"]
9pub mod Traits;
10
11/// Common result type for Grove operations
12pub type Result<T> = anyhow::Result<T>;
13
14/// Grove library version
15pub const VERSION:&str = env!("CARGO_PKG_VERSION");
16
17/// Default configuration values
18pub mod config {
19	/// Default timeout for operations in milliseconds
20	pub const DEFAULT_TIMEOUT_MS:u64 = 30000;
21
22	/// Default buffer size for I/O operations
23	pub const DEFAULT_BUFFER_SIZE:usize = 8192;
24
25	/// Default maximum number of retries
26	pub const DEFAULT_MAX_RETRIES:u32 = 3;
27
28	/// Default connection timeout in milliseconds
29	pub const DEFAULT_CONNECTION_TIMEOUT_MS:u64 = 5000;
30
31	/// Default heartbeat interval in seconds
32	pub const DEFAULT_HEARTBEAT_INTERVAL_SEC:u64 = 30;
33
34	/// Default maximum concurrent operations
35	pub const DEFAULT_MAX_CONCURRENT:usize = 100;
36}
37
38/// Utility functions for common operations
39pub mod utils {
40	use std::time::{SystemTime, UNIX_EPOCH};
41
42	/// Get current Unix timestamp in seconds
43	pub fn now_unix_timestamp() -> u64 { SystemTime::now().duration_since(UNIX_EPOCH).unwrap_or_default().as_secs() }
44
45	/// Get current Unix timestamp in milliseconds
46	pub fn now_unix_timestamp_ms() -> u128 {
47		SystemTime::now().duration_since(UNIX_EPOCH).unwrap_or_default().as_millis()
48	}
49
50	/// Get current Unix timestamp in microseconds
51	pub fn now_unix_timestamp_us() -> u128 {
52		SystemTime::now().duration_since(UNIX_EPOCH).unwrap_or_default().as_micros()
53	}
54
55	/// Generate a unique ID
56	pub fn generate_id() -> String { format!("{}-{}", now_unix_timestamp_ms(), uuid::Uuid::new_v4()) }
57
58	/// Sleep for the specified duration
59	pub async fn sleep_ms(ms:u64) { tokio::time::sleep(tokio::time::Duration::from_millis(ms)).await }
60
61	/// Sleep for the specified duration
62	pub async fn sleep_sec(sec:u64) { tokio::time::sleep(tokio::time::Duration::from_secs(sec)).await }
63}
64
65#[cfg(test)]
66mod tests {
67	use super::*;
68
69	#[test]
70	fn test_version() {
71		assert!(!VERSION.is_empty());
72		assert!(VERSION.contains('.'));
73	}
74
75	#[test]
76	fn test_now_unix_timestamp() {
77		let ts = utils::now_unix_timestamp();
78		assert!(ts > 0);
79	}
80
81	#[test]
82	fn test_generate_id() {
83		let id1 = utils::generate_id();
84		let id2 = utils::generate_id();
85		assert_ne!(id1, id2);
86		assert!(id1.contains('-'));
87	}
88}