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